- 0. SSH
- 1. 开发规范
- 2. 提交记录修改
- 3. [.gitignore文件]
- 在已忽略文件夹中不忽略指定文件夹
- 在已忽略文件夹中不忽略指定文件
- 【注意项】注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效
- 忽略所有 .a 结尾的文件
- 忽略所有 .b 和 .B 结尾的文件,lib.b 除外
- 忽略 node_modules 文件和 node_modules 目录
- 只忽略 node_modules 目录,不忽略 node_modules 文件
- 只忽略 node_modules 文件,不忽略 node_modules 目录
- 忽略 doc/notes.txt 但不包括 doc/server/arch.txt
- 仅忽略当前目录下的 TODO 文件,不包含 subdir/TODO
0. SSH
密钥配置
生成密钥
- id_rsa:
ssh-keygen -t rsa -C "邮箱" - id_ecdsa:
ssh-keygen -t ecdsa -C "邮箱"
配置文件 .ssh/config
Host github.comUser 1097824882@qq.comHostname ssh.github.comPreferredAuthentications publickeyRSAAuthentication yesPort 443IdentityFile ~/.ssh/id_ecdsa
注意:IdentityFile写私钥名字,不要用.pub
:::danger
问题:IdentityFile 似乎写id_rsa/id_ecdsa之外的名字不起作用(猜测可能是服务器的一些默认配置问题)
解决办法:使用脚本设置软连接
:::
# githubrm ~/.ssh/id_rsarm ~/.ssh/id_rsa.publn -s ~/.ssh/sis_github ~/.ssh/id_rsaln -s ~/.ssh/sis_github.pub ~/.ssh/id_rsa.pubrm ~/.ssh/id_ecdsarm ~/.ssh/id_ecdsa.publn -s ~/.ssh/sis_github_ecdsa ~/.ssh/id_ecdsaln -s ~/.ssh/sis_github_ecdsa.pub ~/.ssh/id_ecdsa.pubgit config user.name KenelmQLHgit 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---------------------------------------git clone master-branchgit pullgit checkout local#--------------2---------------------------------------#切换到local分支后, 就是修改代码#修改完了, 就正常提交代码-------git commit#--------------3---------------------------------------#如果有多次local分支的提交,就合并,只有一次可以不合并git rebase -i HEAD~2 //合并提交 --- 2表示合并两个#将master内容合并到localgit rebase master---->解决冲突---> git rebase --continue#--------------4---------------------------------------#再起切换到master或其他目标分支git checkout master#将local合并到mastergit merge local#推送到远程仓库git push
远程分支
团队合作时,需要建立不同的功能分支。
- fork 团队主分支 到 个人的github库
- 本地git clone、创建“功能分支”,并push到个人github库中
- 建立本地-远程联系
- 一般开发流程
- 个人远程库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 ```
