我正在用Gerrit Code Review设置Git,并且正在寻找一种方法,使必要的Git命令对于可能是Git新手的用户来说相对简单。
我目前用来启动一个新特性分支的命令基本上是(假设Gerrit是origin
):
git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234
这将启动一个从一些baseline
分支出来的新工作包work1234
,最后一次推送在Gerrit中创建分支并设置上游。所以.git/config
看起来像这样:
[branch "work1234"]
remote = origin
merge = refs/heads/work1234
现在,Gerrit希望将用于审查的新提交推送到一个特殊的refspec,例如refs/for/work1234
。我可以使用以下命令手动完成此操作:
git push origin work1234:refs/for/work1234
我想要做的是找到一些方法来设置.git/config
,这样一个普通的git push
就会将当前分支推送到Gerrit所需的遥控器上的refspec。我已经研究了以下git config
领域:
branch.<name>.*
-似乎没有任何特定的选项来设置推送refspecpush.default
-我有点想要hereremote.<name>.push
-我在这里尝试了upstream
refs/heads/*:refs/for/*
,但在这种情况下,git push
总是希望推送所有本地分支,而我只想要当前的分支如果我不能让Git自己做到这一点,我会写一个小的包装器脚本来完全指定refspecs。然而,如果Git能够在本地推送到正确的位置,那就更好了。
发布于 2011-08-22 07:05:48
我最终编写了一个新的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
我将此脚本放在/usr/local/libexec/git-core/git-submit
中,现在有一个命令可以将新代码提交给Gerrit进行审查:
$ git submit
如果Gerrit不是origin
remote,那么可以适当地使用git submit <remote>
。
发布于 2012-02-17 01:48:46
我找到了两个选择:
1)看看我做的一个项目,ggh:https://github.com/hobbs/ggh
2)您可以在遥控器中配置默认的推流refspec。我只知道如何使用硬编码的远程分支来做到这一点,仍然在尝试如何通配远程refspec,以便它始终推送到您正在跟踪的远程分支:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ssh://gerrit/repo
push = HEAD:refs/for/master
发布于 2012-08-09 00:10:17
这是Greg Hewgill答案的改进。
在路径上的某个地方创建一个脚本,比如在您的profile bin文件夹中(如果需要,甚至在Windows上也可以创建一个):
$ mkdir ~/bin
$ vi ~/bin/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
REMOTE_BRANCH=`git config --get "branch.$BRANCH.merge"`
if [ -z $REMOTE_BRANCH ]
then
echo "There is no tracking information for the current branch."
echo "If you wish to set tracking information for this branch you can do so with:"
echo ""
echo " git branch --set-upstream $BRANCH <remote>/<branch>"
echo ""
exit 1
fi
git push $REMOTE HEAD:refs/for/$REMOTE_BRANCH
假设您创建了一个远程跟踪分支,如下所示:
$ git checkout -b MyBranch origin/master
您可以简单地调用:
$ git submit
..。在这种情况下推送到refs/for/master
。
https://stackoverflow.com/questions/7101145
复制相似问题