0. SSH

密钥配置

生成密钥

  • id_rsa:ssh-keygen -t rsa -C "邮箱"
  • id_ecdsa:ssh-keygen -t ecdsa -C "邮箱"

配置文件 .ssh/config

  1. Host github.com
  2. User 1097824882@qq.com
  3. Hostname ssh.github.com
  4. PreferredAuthentications publickey
  5. RSAAuthentication yes
  6. Port 443
  7. IdentityFile ~/.ssh/id_ecdsa

注意:IdentityFile写私钥名字,不要用.pub

:::danger 问题:IdentityFile 似乎写id_rsa/id_ecdsa之外的名字不起作用(猜测可能是服务器的一些默认配置问题)
解决办法:使用脚本设置软连接 :::

  1. # github
  2. rm ~/.ssh/id_rsa
  3. rm ~/.ssh/id_rsa.pub
  4. ln -s ~/.ssh/sis_github ~/.ssh/id_rsa
  5. ln -s ~/.ssh/sis_github.pub ~/.ssh/id_rsa.pub
  6. rm ~/.ssh/id_ecdsa
  7. rm ~/.ssh/id_ecdsa.pub
  8. ln -s ~/.ssh/sis_github_ecdsa ~/.ssh/id_ecdsa
  9. ln -s ~/.ssh/sis_github_ecdsa.pub ~/.ssh/id_ecdsa.pub
  10. git config user.name KenelmQLH
  11. git config user.email 1097824882@qq.com

1. 开发规范

本地分支

假设Git目前只有一个分支master。开发人员的工作流程是:

  • git clone master branch
  • 在自己本地checkout -b local创建一个本地开发分支
  • 在本地的开发分支上开发和测试
  • 阶段性开发完成后(包含功能代码和单元测试),可以准备提交代码
    • 首先切换到master分支,git pull拉取最新的分支状态
    • 然后切回local分支
    • 通过git rebase -i 将本地的多次提交合并为一个,以简化提交历史。本地有多个提交时,如果不进行这一步,在git rebase master时会多次解决冲突(最坏情况下,每一个提交都会相应解决一个冲突)
    • git rebase master 将master最新的分支同步到本地,这个过程可能需要手动解决冲突(如果进行了上一步的话,只用解决一次冲突)
    • 然后切换到master分支,git merge将本地的local分支内容合并到master分支(若不切换,直接push local分支会在远程创建新分支创建)
    • git push将master分支的提交上传
  1. #--------------1---------------------------------------
  2. git clone master-branch
  3. git pull
  4. git checkout local
  5. #--------------2---------------------------------------
  6. #切换到local分支后, 就是修改代码
  7. #修改完了, 就正常提交代码-------git commit
  8. #--------------3---------------------------------------
  9. #如果有多次local分支的提交,就合并,只有一次可以不合并
  10. git rebase -i HEAD~2 //合并提交 --- 2表示合并两个
  11. #将master内容合并到local
  12. git rebase master---->解决冲突---> git rebase --continue
  13. #--------------4---------------------------------------
  14. #再起切换到master或其他目标分支
  15. git checkout master
  16. #将local合并到master
  17. git merge local
  18. #推送到远程仓库
  19. git push

远程分支

团队合作时,需要建立不同的功能分支。

  1. fork 团队主分支 到 个人的github库
  2. 本地git clone、创建“功能分支”,并push到个人github库中
  3. 建立本地-远程联系
  4. 一般开发流程
  5. 个人远程库pull request ```bash //创建自己的本地新分支 git branch dev-junit5-test

//查询远程仓库 git remote

//把新分支推送到远程仓库(此处origin为远程仓库名称): git push origin dev-junit5-test //此步骤执行完成,远程仓库会生成分支dev-junit5-test

//可省略:将当前分支代码与远程仓库新分支进行关联(感觉本地创建并push后已经自己建立了关联) (git branch —set-upstream-to=origin/dev-junit5-test)

// 将本地分支代码远程仓库新分支 git add -A:提交到暂存区 git commit -m ‘XXXXXXX’:提交到本地分支 git push origin dev-junit5-test:推动到远程仓库


- _**在本地库构建并切换任意的远程分支**_
```bash
git clone只能clone远程库的master分支(默认),无法clone所有分支,解决办法如下:

// 得到project目录
git clone http://myrepo.xxx.com/project/.git 
// 列出所有分支名称如下:
git branch -a
// remotes/origin/dev
// remotes/origin/release

git checkout -b dev origin/dev
//作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支

git checkout -b release origin/release 
//作用参见上一步解释

git checkout dev
// 切换回dev分支,并开始开发。
  • 更新远程库(fork)
    git remote add upstream git@github.com:coreos/etcd.git
    git fetch upstream
    git merge upstream/master
    git push
    

2. 提交记录修改

参考:https://blog.csdn.net/liuxiaoheng1992/article/details/104029345
法1:git commit --amend
把当前缓存区的改动合并到最后一次commit的记录中,同时可以更改最后一次提交的commit tag

法2:git rebase -i [commit_id_to_merge]
git rebase -i 可以合并多个分支。
执行命令后,有两个vim窗口操作:更改记录(commit)的配置,然后更改具体的commit信息(如可以删除待合并的commit记录)
注意:想将哪些提交合并,那-i后面跟的提交号应该是这些提交中最早的那个提交前一个提交

3. [.gitignore文件]

规则

  • 以斜杠 / 开头表示目录
  • 以星号 * 通配多个字符
  • 以问号?通配单个字符
  • 以方括号 [] 包含单个字符的匹配列表
  • 以叹号!表示不忽略 (跟踪) 匹配到的文件或目录

    举例

    ```bash

    在已忽略文件夹中不忽略指定文件夹

    /node_modules/* !/node_modules/layer/

在已忽略文件夹中不忽略指定文件

/node_modules/* !/node_modules/layer/layer.js

【注意项】注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效

忽略所有 .a 结尾的文件

.a .[oa]# 忽略所有以 .o 或 .a 结尾的文件

忽略所有 .b 和 .B 结尾的文件,lib.b 除外

*.[bB] !lib.b

忽略 node_modules 文件和 node_modules 目录

node_modules

只忽略 node_modules 目录,不忽略 node_modules 文件

node_modules/

只忽略 node_modules 文件,不忽略 node_modules 目录

node_modules !node_modules/

忽略 doc/notes.txt 但不包括 doc/server/arch.txt

doc/*.txt

仅忽略当前目录下的 TODO 文件,不包含 subdir/TODO

/TODO ```