Gre*_*ill 17 git push gerrit refspec
我正在使用Gerrit Code Review设置Git,并且正在寻找一种方法,为可能不熟悉Git的用户提供必要的Git命令.
我目前用于启动新功能分支的命令基本上是(假设Gerrit是origin
):
git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234
Run Code Online (Sandbox Code Playgroud)
这将启动一个新的工作包work1234
从一些baseline
分支,最后的推动在Gerrit中创建分支并设置上游.所以.git/config
看起来像:
[branch "work1234"]
remote = origin
merge = refs/heads/work1234
Run Code Online (Sandbox Code Playgroud)
现在,Gerrit希望将新的提交审查推送到特殊的refspec,refs/for/work1234
例如.我可以手动执行以下操作:
git push origin work1234:refs/for/work1234
Run Code Online (Sandbox Code Playgroud)
我想要做的是找到一些设置方法,.git/config
以便plain git push
将当前分支推送到Gerrit所需的远程refspec.我看过以下几个git config
方面:
branch.<name>.*
- 似乎没有任何特定的选项来设置push refspecpush.default
- 我想要upstream
在这里remote.<name>.push
- 我refs/heads/*:refs/for/*
在这里试过但git push
总是想在这种情况下推送所有本地分支,而我只想要当前的分支如果我不能让Git的本身做到这一点,我会写一个小包装脚本,完全指定refspecs.但是,如果Git能够本地推向正确的位置会更好.
我最后写了一个新git-submit
脚本:
#!/bin/sh -e
if [ -z "$1" ]; then
REMOTE=origin
else
REMOTE=$1
fi
BRANCH=`git symbolic-ref HEAD`
case $BRANCH in
refs/heads/*)
BRANCH=`basename $BRANCH`
;;
*)
echo "I can't figure out which branch you are on."
exit 1
;;
esac
git push $REMOTE HEAD:refs/for/$BRANCH
Run Code Online (Sandbox Code Playgroud)
我把这个脚本放进去/usr/local/libexec/git-core/git-submit
,现在有一个命令可以将新代码提交给Gerrit进行审查:
$ git submit
Run Code Online (Sandbox Code Playgroud)
如果Gerrit不是origin
遥控器,那么请git submit <remote>
适当使用.