2013-01-14 162 views
7

我喜歡簡單地使用git push將當前分支推送到配置的上游。爲此,我設置了git config push.default upstream這確實是正確的。將當前分支推送到Gerrit

現在我試着爲Gerrit設置一個合適的遙控器,它會自動推送到refs/for/*

當時的想法是做這種方式:

[remote "gerrit"] 
     url = ssh://host:port/repo 
     push = refs/heads/*:refs/for/* 

我想鍵入git push gerrit,並期望混帳只能作用於當前分支推到正確的裁判。

不幸的是,現在git試圖推動所有地方分支Gerrit。 - 有沒有什麼辦法可以讓git只推送當前分支,就像上面的push.default一樣?

更新:

  • 推送操作只能使用一個單一的Refspec。
  • 如果在命令行上給出了明確的refspec,則使用這一個。
  • 如果沒有在命令行中給出,則使用使用遠程定義的那個。
  • 如果遠程也沒有給出,只有push.default被考慮。

對於Gerrit,我需要一個像'branch:refs/for/branch'這樣的分支作爲當前分支的refspec。

問:

  • 是否有一個明確的Refspec相當於=上游是做什麼push.default?
  • 有沒有辦法將git配置成自動推送到正確的refs/for ref?

目前我發現的最好方法是將所有內容都包裝在一個單獨的腳本中,如建議的here。但我仍然不相信只有一個合適的參考是不可能的。

+0

好的。只需在這裏查看不同的選項。我瞭解到'push.default'只有在沒有給出refspec的情況下才會考慮。如果你通過命令行提供一個refspec(比如'HEAD'),這將覆蓋遠程給定的refspec。因此它只會推到'ref/heads',這不是你想要的。有趣。 – VonC

回答

1

根據source,Git通過生成包含顯式名稱的顯式refspec來實現push.default = upstream

好像目前還沒有辦法通過一個通用的Refspec指定的行爲,以及一些腳本(如建議here),它現在建立一個明確的Refspec是唯一的出路。

+0

有趣的反饋,肯定比我的(現在刪除的)答案更準確。 +1 – VonC

-1

您可以配置git使用命令git config --global push.default current僅將當前分支發送到遠程存儲庫。

,你可以傳遞給push.default其他選項:

nothing - do not push anything. 
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default. 
upstream - push the current branch to its upstream branch. 
tracking - deprecated synonym for upstream. 
current - push the current branch to a branch of the same name. 

這些配置可以在git help config命令看到。

UPDATE:但是,仔細閱讀手冊頁push.default「定義了git push在命令行中未給定refspec時應執行的操作,在遠程中沒有配置refspec,並且沒有任何refspec暗示在命令行上給出的選項「。所以,我認爲在指定refspec時你需要使用腳本發送當前分支。

+0

您是否在發佈之前閱讀過我的評論?我回答如下(刪除,你看不到它),並得到-1;) – VonC

+0

你完全讀完這個問題?不,只有在沒有給出refspec的情況下才會考慮push.default,也就是說它只是推到頭上。 – michas