首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Gerrit时,如何为Git配置特定的上游推送refspec?

在使用Gerrit时,如何为Git配置特定的上游推送refspec?
EN

Stack Overflow用户
提问于 2011-08-18 08:41:16
回答 4查看 9.2K关注 0票数 18

我正在用Gerrit Code Review设置Git,并且正在寻找一种方法,使必要的Git命令对于可能是Git新手的用户来说相对简单。

我目前用来启动一个新特性分支的命令基本上是(假设Gerrit是origin):

代码语言:javascript
复制
git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234

这将启动一个从一些baseline分支出来的新工作包work1234,最后一次推送在Gerrit中创建分支并设置上游。所以.git/config看起来像这样:

代码语言:javascript
复制
[branch "work1234"]
        remote = origin
        merge = refs/heads/work1234

现在,Gerrit希望将用于审查的新提交推送到一个特殊的refspec,例如refs/for/work1234。我可以使用以下命令手动完成此操作:

代码语言:javascript
复制
git push origin work1234:refs/for/work1234

我想要做的是找到一些方法来设置.git/config,这样一个普通的git push就会将当前分支推送到Gerrit所需的遥控器上的refspec。我已经研究了以下git config领域:

  • branch.<name>.* -似乎没有任何特定的选项来设置推送refspec
  • push.default -我有点想要here
  • remote.<name>.push -我在这里尝试了upstream refs/heads/*:refs/for/*,但在这种情况下,git push总是希望推送所有本地分支,而我只想要当前的分支

如果我不能让Git自己做到这一点,我会写一个小的包装器脚本来完全指定refspecs。然而,如果Git能够在本地推送到正确的位置,那就更好了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-22 07:05:48

我最终编写了一个新的git-submit脚本:

代码语言:javascript
复制
#!/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进行审查:

代码语言:javascript
复制
$ git submit

如果Gerrit不是origin remote,那么可以适当地使用git submit <remote>

票数 8
EN

Stack Overflow用户

发布于 2012-02-17 01:48:46

我找到了两个选择:

1)看看我做的一个项目,ggh:https://github.com/hobbs/ggh

2)您可以在遥控器中配置默认的推流refspec。我只知道如何使用硬编码的远程分支来做到这一点,仍然在尝试如何通配远程refspec,以便它始终推送到您正在跟踪的远程分支:

代码语言:javascript
复制
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ssh://gerrit/repo
    push =  HEAD:refs/for/master
票数 4
EN

Stack Overflow用户

发布于 2012-08-09 00:10:17

这是Greg Hewgill答案的改进。

在路径上的某个地方创建一个脚本,比如在您的profile bin文件夹中(如果需要,甚至在Windows上也可以创建一个):

代码语言:javascript
复制
$ mkdir ~/bin
$ vi ~/bin/git-submit

内容如下:

代码语言:javascript
复制
#!/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

假设您创建了一个远程跟踪分支,如下所示:

代码语言:javascript
复制
$ git checkout -b MyBranch origin/master

您可以简单地调用:

代码语言:javascript
复制
$ git submit

..。在这种情况下推送到refs/for/master

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7101145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档