[英]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.