- 目录
{:toc}
基础
以在GitLab上创建一个project为例
1. SSH秘钥
生成SSH秘钥指令:$ ssh-keygen -t rsa -C "votre.email@telecom-sudparis.eu" -b 4096
保存在$HOME/.ssh/id_rsa.pub
将获得的SSH秘钥填入GitLab网站
SSH秘钥用于GitLab网站识别Unix账号
2. 创建project并添加合作者
命名规则:课程+年份+创作者
给合作者Master权限
3. 克隆project到本地
git clone git@gitlab.tem-tsp:votreprenom.votrenom/votrenomdeproject.git
4. 查看git状态
git status
5. 创建第一个文件README.md并提交
git add README.md
git commit -m "注释"
git push origin master
- 其他合作者
git pull origin
git add:
i)git add .
或git add --all
提交所有修改git commit:
i)git commit
后会生产一个hash码,用于标记此次commit操作git push:
i)git push
默认将master上传
ii)origin是远程仓库名,master是分支名git pull:
i)当有其他人想master分支推送了更新,则服务器上的master向前推进,本地的Master落后服务器版本,需要运行git fetch
来同步本地并用git merge
合并,或直接用git pull
。git pull
=git fetch
+git merge
分支操作
branch
1. 创建分支
git checkout -b module1
i) 创建并转到module1分支
ii)git checkout 分支名
转到已存在的分支
2. 查看分支
git branch
i)一般而言,Master分支是默认创建的。
但若是在项目一开始,即项目为空时,创建分支,会丢失master分支。
3. 在分支上进行操作
- 与在基础部分操作相同
- 在每个分支上做的add,commit操作是独立的
4. 查看日志
git log --graph --oneline --decorate
- 使用工具gitg/gitk
5. 合并(Fusion)分支
- 转到Master
git checkout master
git merge --no-ff moudle1 -m "Merge branch 'modele1'"
i) 有--no-ff
则moudle1会保留,没有则不保留module1分支
冲突conflict
设置冲突管理工具
git config merge.tool meld
冲突前提
分支module1和Master中有同一个文件,且分别在不同分支修改了文件,并做了add commit
操作。做第二次commit
时冲突发送。
解决方法:
用git mergetool
调用meld,查看修改冲突的地方,修改保存后会生成很多不必要的文件
用rm 文件名.文件类型.* 文件名_* *~
删除这些文件。
Git-flow
Git-flow原则
- 两条长期分支
master只保留官方的,实用的代码版本
develop在这个分支进行开发,只有想正式对外发布且经过确认,才会和Master合并。
- 新建develop分支:
git checkout -b develop master
- 将develop分支发布到Master分支:
git checkout Master
`git merge --no-ff develop `
创建release(预发布)分支
当要进行develop分支和Master合并时,先从develop分支上创建一个release分支,加上标签(tag)用于标记新的版本。
建议创建一个release分支,这个分支里commit只用于修改bugs。在develop的子分支(feature分支)上编码
只有子分支状态满足,develop上的合并操作才会执行hotfix
当master上发现bug,就在master上引出一个hotfix分支。
这个分支有两个作用:- 为Master提供一个新版本
- 为develop修复整个project的bug
注意:release,feature和hotfix分支都是临时分支,使用完后,应该删除,使代码库的常设分支始终只有Master和Deve。
Git-flow例子
- 在本地建立工作文件夹,初始化库
1 | mkdir exercice-git-flow |
新建develop分支
git checkout -b develop
新建feature分支,以功能名命名
git checkout -b navire1
在这个分支中写一个文本文档
1 | gedit navire.txt |
- 修改和二次提交
为navire.txt中加入新的几行
1 | gedit navire.txt |
现在我们已经实现了一定功能,合并这个分支和develop
1 | git checkout develop |
- 假设经过多次3-5,我们已经实现了很多功能,想把develop和master合并
1 | git checkout master |
因为这是一个正式版本,我们加上标签taggit tag -a v1.0 -m "release 1.0"
版本控制
=有待完成=