最近碰到这样的情况:
开发人员在项目早期使用内部git server管理代码,项目正式的gerrit server建立起来后,开发人员需要将内部git server上的代码上传到gerrit server上去,但是由于早期提交到内部git server上的commit没有严格要求name和email,以及sign-off-by,所以导致这些commit无法提交到gerrit server上去。
解决方法如下:
1,修改历史commit中的信息:
需要修改的信息包括:Author, Change-ID, signed-off-by
1.1 修改Author信息
需要使用下面的脚本:
-
#!/bin/sh
-
-
git filter-branch --env-filter '
-
-
an="$GIT_AUTHOR_NAME"
-
am="$GIT_AUTHOR_EMAIL"
-
cn="$GIT_COMMITTER_NAME"
-
cm="$GIT_COMMITTER_EMAIL"
-
-
if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
-
then
-
cn="Your New Committer Name"
-
cm="Your New Committer Email"
-
fi
-
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
-
then
-
an="Your New Author Name"
-
am="Your New Author Email"
-
fi
-
-
export GIT_AUTHOR_NAME="$an"
-
export GIT_AUTHOR_EMAIL="$am"
-
export GIT_COMMITTER_NAME="$cn"
-
export GIT_COMMITTER_EMAIL="$cm"
-
'
1.2 修改Change-ID和signed-off-by
这实际上就是重新提交commit,在提交commit之前先设置好钩子函数,在提交commit的时候加上-s参数。
-
#git rebase -i "uuid before the first commit to be re-submit"
-
#git commit -s -amend
-
#git rebase --continue
-
#...
2, 将gerrit server上的empty git与本地master做rebase
-
#git remote add origin your_gerrit_url
-
#git pull origin master:remotemaster
-
#git rebase remotemaster
-
#git branch -d remotemaster
3, push到gerrit server上
-
#git push origin master:refs/for/master
阅读(405) | 评论(0) | 转发(0) |