Git 和 Gerrit 使用过程中问题收集

2019-04-11 0 By admin

1、git push 推送失败

[remote rejected] master -> master (prohibited by Gerrit)
error: failed to push some refs to xxxx

说明:使用 Gerrit 一般要将代码贡献推送到refs/for/branch;进过CodeReview等过程后合并到分支中。
出现push错误的话,一般是在Gerrit中没有相应的权限。请联系Gerrit管理员处理。

2、分支合并时,谨慎使用 git merge

开发者在DEV分支上做测试环境开发,并将代码贡献Commits和Changes都合并到DEV分支了。当需要将代码合并到生产使用的Master分支时,如果在Master分支上直接使用merge dev 操作,则在DEV分支开发过程中提交的Changes并不会在Master分支中记录下来,这样我们在Master分支中就看不到代码贡献过程中的细节。
说明:a commit was pushed directly to a branch (without going through code review) you cannot push this commit once again for code review。
一个已经推送Push到分支的提交Commit,不能再次推送给CodeReview。
补充:git merge –squash branchName 可以将被合并分支上的Commits合为一个新的Commit,并推送给CodeReview。使用 rebase 或者 cherry-pick。

3、git fetch/git clone 失败

git clone 一个大的项目时失败,错误类似fatal: The remote end hung up unexpectedly | fatal: early EOF | fatal: index-pack failed
项目过大,受硬件限制(类似过载保护),clone过程中会中断。
1、git clone –depth 1 repo_URI
2、git fetch –unshallow
3、git pull –all

4、配置好秘钥,依然permission denied (publickey)。

查看后台log, 发现log显示”AUTH FAILURE FROM 100.64.8.159 user-not-found”
在web ui->settings->profile看下,username是否做了设置。

5、配置jenkins的gerrit-trigger,发现gerrit日志中出现warning

WARN com.google.gerrit.server.change.PostReview : notify = null; assuming notify = NONE
解释:
Make sure that the 'gerrit review' command used by Jenkins to post reviews contains the '--notify' option .If it is not set, by default, no email notification is triggered (as you can see from the warning the you posted above).The Gerrit Trigger plugin allows to configure the command to post reviews in its advanced settings.
持续集成中使用的 jenkins gerrit-trigger 在发表review comments的时候,没有使用 –notify导致没有触发邮件通知的原因。

6、找回已经删除的commit

git reflog 找到那个commitID,或者可以通过 git log -g 获取更加详细的commit信息。reflog保存的是历次对于HEAD的修改。
然后git reset –hard commitID直接回到那个commit;或者使用git cherry-pick commitID,将那个commit的内容拿到当前(可能需要解冲突),同时生成一个新的commit。

7、工程瘦身操作

对某个project进行瘦身, 降低project的大小。实践发现,gc的效果比repack更好。gc后大小大约为原来的1/3。