与Gerrit一起使用时如何为Git配置特定的上游push refspec?

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 refspec
  • push.default- 我想要upstream在这里
  • remote.<name>.push- 我refs/heads/*:refs/for/*在这里试过但git push总是想在这种情况下推送所有本地分支,而我只想要当前的分支

如果我不能让Git的本身做到这一点,我会写一个小包装脚本,完全指定refspecs.但是,如果Git能够本地推向正确的位置会更好.

Gre*_*ill 8

我最后写了一个新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>适当使用.