簡體   English   中英

與Gerrit一起使用時如何為Git配置特定的上游push refspec?

[英]How to configure specific upstream push refspec for Git when used with Gerrit?

我正在使用Gerrit Code Review設置Git,並且正在尋找一種方法,為可能不熟悉Git的用戶提供必要的Git命令。

我目前用於啟動新功能分支的命令基本上是(假設Gerrit是origin ):

git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234

這將啟動一個新的工作包work1234從某個baseline分支,最后的推送在Gerrit中創建分支並設置上游。 所以.git/config看起來像:

[branch "work1234"]
        remote = origin
        merge = refs/heads/work1234

現在,Gerrit希望將新的提交審核推送到特殊的refs/for/work1234 ,例如refs/for/work1234 我可以手動執行以下操作:

git push origin work1234:refs/for/work1234

我想要做的是找到一些設置.git/config這樣普通的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能夠本地推向正確的位置會更好。

我最終編寫了一個新的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遠程,則根據需要使用git submit <remote>

我發現了兩個選項:

1)查看我制作的項目,ggh: https//github.com/hobbs/ggh

2)您可以在遙控器中配置默認​​的push refspec。 我只想知道如何使用硬編碼的遠程分支執行此操作,仍然試圖找出如何通配遠程refspec以便它始終推送到您正在跟蹤的遠程:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ssh://gerrit/repo
    push =  HEAD:refs/for/master

以下是Greg Hewgill回答的改進。

在路徑的某個位置創建一個腳本,就像在配置文件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

git config push.default upstream
git config branch.work1234.merge refs/for/work1234
git config branch.work1234.remote origin

或.git / config:

[push]
        default = upstream
[branch "work1234"]
        merge = refs/for/work1234
        remote = origin

我不確定是否有辦法在任何地方放置通配符,以使其適用於所有分支機構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM