一、准备工作
1、 Gerrit设置
登录gerrit,公司的Git库管理工具。
点击页面右上角的 Settings (点击右上角的名字 -> Settings)
点击左侧的 HTTP Credentials
点击界面上的 Generate new password 生成新的密码(该密码需要保存到本地,下面clone代码时需要使用到)
2、 配置准备
下载Git配置文件:.gitconfig(点我下载),保存到用户目录。注意文件名是以点开头,文件最终路径是:Windows:C:\Users\你的用户名\.gitconfig
Linux, Mac:/home/你的用户名/.gitconfig
编辑这个.gitconfig文件,把名字和邮箱改成你自己的
这是全局设置,如果想每个项目设置不一样内容,可以把不一样的配置项复制到项目的配置文件中项目的配置文件是:项目目录/.git/config
如果全局和项目有相同的配置项,项目的会覆盖全局的
t首次提交代码,更新email以及name,举例:张三(名.姓)
git config --global user.email "san.zhang@allintechinc.com"
git config --global user.name " san.zhang "
二、第一次获取代码
1、 Clone代码
登录gerrit网站
点击菜单上 Projects -> List 进入项目列表 (Old UI),如果是 New UI,点击菜单上的 Browse -> Repositories
点击项目列表中需要Clone的项目的名字,进入项目仓库的详情页面
点击 Clone with commit-msg hook 和 http
复制下面的命令
在电脑上打开终端(Windows需要打开Git Bash:注意不要用Git CMD)
使用cd 命令跳转到要clone代码的目录
将上面拷贝的命令粘贴到终端,按下回车键执行
clone下来的项目默认是master分支,文件夹中没有业务代码,需要切到develop分支才有业务代码
如果需要输入密码,不是LDAP的密码,是一、准备工作中的第一步中Gerrit生成的密码,很长的一个字符串密码如果密码输入错误或者想要重置密码,需要进行重置凭据操作
2、检出工作分支
cd 项目目录
git co develop
三、一个任务的完整开发周期和流程
ee每次提交都要执行全部的步骤
1、 代码更新,清理上个已完成任务分支
git co develop
git pull
git br -d TAIH-xxxx
其中TAIH-xxxx,是上个已完成任务的分支名字,否则之前已完成任务的分支会很多。
如果是项目的第一个任务,可以忽略。
2、 新建当前任务分支
git co -b TAIH-xxxx
其中TAIH-xxxx,是Jira上的任务号,如JMD-123
开始工作
3、 工作完成,提交代码
先提交当前修改,并填写提交信息
git add .
git ci
提交消息的基础模板为:
TAIH-xxxx: 修改内容的简要说明
1. 修改项1
2. 修改项2
3. 修改项3
4. 修改项4
注意: 提交消息中的change-id不要删除或修改,保留change-id在提交消息的最后一行即可
4、 同步代码
在开发当前任务的这段时间,可能已经有同事对同一个代码库做了提交,所以需要先同步一下develop分支
git co develop
git pull
5、 Rebase代码
把刚才的任务分支的修改,在develop的最新版本上rebase一下
git co TAIH-xxxx
git rebase develop
如果有失败信息,说明已经有同事,跟你改了同一个文件的同一行代码,所以无法自动合并文件,需要打开文件手动解决冲突部分。
6、 推送代码
git review
如果提交的时候总是提示需要输入密码 在命令行上执行这样 git config --global credential.helper store 一行命令
7、 添加reviewer
登录gerrit
一般情况下登录后可以看到刚刚的提交,如果不在提交列表下,可以点击菜单上的 My -> Changes,点击刚刚的提交
进入提交的详情页面,点击 Reviewers后的小人图标,添加reviewer。
注意: 在看到jenkins打分为 +1 后再添加reviewer,如果 Jenkins 的校验未通过,在本地修改后 Jenkins 检测出的问题后重新提交
8、 代码Review未通过的情况下
本地继续修改Review中发现的问题
提交修改
git add .git ci --amendgit co develop git pull git co TAIH-xxxx git rebase developgit review
注意:这里如果只是修改一些typo,添加注释等,可以不修改提交消息
9、 Review之后
如果代码通过了Review,任务已经结束,代码已经合并到develop分支。从步骤1重新开始
如果任务未结束,继续编码解决问题
10、备注
开发人员只能在Task和Bug下进行任务提交
一个任务可以多次提交,如果完成一个任务编写的代码行数较多,大家需要多次提交,并且保证每次提交不会导致程序无法允许
一个提交被merge之后,在修改代码时,应该重新提交。 一个commit 对应一个Code Review。
11、Git提交常见问题及解决方式
重要:先看Git使用文档 Git使用说明
11.1 正常提交review后,发现有问题需要修改怎么办?
要看提交的内容是否已经Merge
已经Merge:重新修改,重新提交即可。
还未Merge:修改,然后 在commit 时增加参数 --amend 。
11.2 提交review后,发现多提交了文件,如何处理?
直接删除这个文件,然后重新提交review即可。具体提交方式见上面的11.1
11.3 提交Review后,在Gerrit上面提示有冲突,或者提示有 Relation Chain,如何处理?
处理方法:点击或上角的 Abanbon 按钮,重新提交。
出现冲突的原因:多次提交修改了同一个文件,Git在Merge时发生冲突。
出现Relation Chain的原因:一次提交的代码分支是基于另一次提交的代码分支而建。每次修改的分支都应该从develop分支建立。
11.4 正常提交Review后想修改,但是develop分支有新的版本,如何操作?
方法一:
stage本次修改的内容: git add .
stash本次修改的内容;git stash save {修改内容描述}
切换回 develop分支;git checkout develop
拉取最新的内容;git pull
切换回本次修改分支;git checkout {本次分支}
rebase分支:git rebase develop
使用 git stash list 查看之前 stash的内容;
使用 git stash apply {stash的编号} ,重新应用修改;
重新提交;注:增加--amend参数
提交Review:git review
方法二:
不Stash,用rebase来合并
git commit --amend
git co develop
git pull
git co {自己的分支}
git rebase develop
如果冲突解决冲突
解决完后 git commit --amend
方法三:
不使用新分支,直接在develop上面开发
git pull (使用idea来pull,因为有冲突时直接使用命令行pull不下来)
手动合并
git commit --amend
git review