1. 用浏览器打开gerrit网址,点击右上角的“Sign In”出现如下对话框
2. 在这里输入你的域帐号和密码,点“Sign In”登陆,第一次登陆时的页面类似如下:
3. 在这个页面上点“Register New Email”按钮,弹出下面的窗口:
4. 用putty等SSH工具登陆Linux系统,例如登陆Linux系统的帐号为roger。
5. 检查 /home/roger/.ssh 这个目录是否存在,如果己经存在,请直接跳到第3步继续; 如果不存在,在putty中执行如下命令ssh-keygen,
将 /home/roger/.ssh/id_rsa.pub 这个公钥文件的整个内容Copy出来,可以用 cat 命令将整个内容打印到界面上,然后Copy下来(注意是将整个文件内容都copy):
6. 登陆到Gerrit系统,依次点击右上角的“Settings” -> 左侧的“SSH Public Keys”,类似下面的图在putty上 Copy下来的/home/roger/.ssh/id_rsa.pub 文件内容全部粘到文本框中,再点击页面中间的“Add” 按钮保存添加的公钥内容。至此,Git仓库的注册过程全部完成。
如果有多台机器都需要访问Git库,请登陆每一台机器,并用相同的过程生成密钥对文件,同时将公钥文件内容添加到这里。
7. Clone
a) 登陆Gerrit
b) 点击“Projects” 链接
c) 系统会列出Gerrit上面你有权限看到的所有的仓库列表
d) 选择需要clone的仓库,以C9660为例,点击“C9660”
e) 界面上会列出这个库所有的分支(注意,非管理员帐号登陆时,分支名称前面是没有复选框和“Delete”以及“Create Branch”按钮的)
f) 在这个图中红色框中的字符串就是要clone的仓库的地址,复制红色框中的整个字符串。请不要使用那个“http://xxxx”协议的地址来clone仓库,虽然用“http://”协议的地址clone仓库也能成功,但是是无法将本地修改的版本推送到其它服务器上去的,如果是不需要修改仓库中的文件,可以用这个协议来clone仓库。
注意:
对于不同的用户或不同的仓库,这个字符串的内容可能是不一样的,
8. 配置Git帐号信息
a) git config --global user.name xxxxx #这里的用户名称请用自己的帐号名称,而且最好能和邮件地址中的帐号名称保持一致
git config --global user.email xxxxx #这个邮件地址请用自己邮件地址,并要求和注册认证时填写的邮件地址完全一样
9. 分支的创建与切换
a) 先用 git pull --rebase 命令从服务器上更新内容,更新时同时会把服务器上的一些分支信息更新到本地,后面创建分支时需要这些信息
b) 确定一下本发的当前分支名称,用 git branch 命令查看
c) 查看服务器上的分支信息,执行命令 git branch -r
d) 创建跟踪分支经常采用以下两种方式:
git branch local_branch_name origin/xxxx
git checkout -b local_branch_name origin/xxxx
e) 切换分支 git checkout xxxx
f) 有以下两种常用的方式来创建本地分支:
git branch new_branch_name
git branch new_branch_name start_version
这两种方式的不同之处在于:第一种是根据当前分支的最新版本来创建一个新的分支,而第二种方式则是根据当前分支上指定的版本来创建新的分支。
g) Git log --oneline -5获取最后的5个log
10. 修改文件并提交:
a) Git add test.txt 记录新增或修改的文件,
b) git reset HEAD file 命令来从暂存区中取消这个文件
c) 果要彻底放弃掉刚才的修改,则还需要执行“git checkout -- file” 命令
d) 将修改提交到版本库中,执行如下命令git commit -m "add some file"
e) 1:git log -3 #打印出最近三次的log信息, 符号“-”后面的数字表示要列出最近log的条数
2:git log --oneline #将log 打印成一行显示出来,在这种格式下面,commit-Id 将会采用短格式来显示,即只显示commit-Id 的前7位
3:git log ${commit-Id} #此时只显示指定版本 ${commit-Id} 的log信息
4:git log -- src/com/cellon/string.h #此时只显示指定文件 src/com/cellon/string.h 所有修改的log,其它文件的log不显示
5:git log -- src/com/cellon #此时只显示当前目录 src/com/cellon 下面所有修改的log,其它目录修改的log不显示
6:git log --name-status #此时会显示每个版本修改了文件列表
7:git log ${branch_name} #此时显示指定分支${branch_name}上的log信息,${branch_name}这个分支不需要是当前分支
8:git log --author= #此时显示指定用户提交的log信息
f) 1:git status -- path #只显示指定目录下面的文件状态信息
2:git status -s #以短格式来显示文件的状态信息
g) 版本回退,例如要回退到 6caa1de552c5d065acace3a80f8332e3208c9e32,
执行git reset 6caa1de552c5d065acace3a80f8332e3208c9e32
h) git reset 命令
i) 1:在版本推送前,最好选将服务器上最新的代码取下(git pull --rebase)来同本地进行合并一下。如果本地的修改和服务器上最新的内容合并有冲突时,那么此时就可以发现冲突并解决,否则推送的版本即使是通过Review了,也合并不进版本库的,避免在Gerrit重复进行无谓的评审操作。
2:在Gerrit2.3版本中,经常会出现在评审通过后,Gerrit提示文件路径有冲突导致无法合并进版本号,
Your change could not be merged due to a path conflict.
Please merge (or rebase) the change locally and upload the resolution for review.
此时需要在本地先进行合并,然后再推送,所以在版本推送前,最好执行一下命令:git rebase orgin/xxxx ,这样会将服务器上xxxx分支的最新内容同本地对应的分支合并,再评审时就不会报类似的错误了。
1:版本更新是指将远程服务器仓库中的内容更新到本地,相关命令如下:
git pull --rebase
解释:
这条命令将会根据服务器上的内容更新本地分支,不仅仅更新当前分支,同时也会更新本地的其它分支
pull 是git的版本更新命令
--rebase 是版本更新时的合并方式,在版本更新时,请尽量加上这个参数,否则有可能在本地产生一些自动Merge的提交。
2:更新指定的分支命令:
git pull --rebase origin xxxxx
解释:
这条命令将会根据服务器上xxxxx分支上的内容,更新本地与服务器上xxxxx分支相关联的分支
pull 是git的版本更新命令
--rebase 是版本更新时的合并方式,在版本更新时,请尽量加上这个参数
origin 是指服务器的引用地址
xxxxx 服务器上分支的名称
j) git pull --rebase
git pull --rebase origin xxxxx
11. 代码评审
a) 登陆之后,点击左上角的“All”链接
b) 然后再点击页面左上角第二行的“Open”链接
c)
git branch -d branch_name
git branch -D branch_name
这两种方式的不同之处在于第一种方式会检查被删除的分支上的内容是否己经合并到其它分支,如果没有合并,则提示要求合并,并且不能删除; 而第二种方式则不管要删除的分支上的内容是否己经合并,强行删除。
启用Change-Id方法:
1:下载 http://xxxx/tools/hooks/commit-msg 这个文件(如果是其它的Gerrit服务器,只是前面的ip地址和端口不一样,后面的值都是一样的)。
2:将下载下来的commit-msg这个文件放到己经clone下来的仓库中 .git/hooks 目录下面,文件名称不要改,还是commit-msg。
3:将.git/hooks/commit-msg 这个文件的权限修改755,必须要赋于执行权限(chmod 755 .git/hooks/commit-msg ),否则它无法生效。
4:和平时一样去修改某个文件并提交,然后查看log就会看到己经生效了。
Invalidcommiter:
git config user.email
git --global config user.name
git --global config user.email
git commit --amend --reset-author