2012-08-08 26 views
80

的混帳配置手冊頁列出了這些選項push.default:git push.default = current和push.default = upstream有什麼區別?

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. 

在大多數情況下,我會假設,推到一個分支的上游分支將是一樣推到同名的一個分支,因爲上游分支通常具有相同的名稱,並且因爲同名(「當前」)的分支通常(或者總是按照定義?)在上游。那有什麼區別?

UPDATEThe man page for git-config已更新(如人們所期望的),這樣做there的區別可能是更加清晰了。

+2

對於開發人員來說,確實很煩人,因此引入了「簡單」,並且將成爲git-push的默認行爲。實際上它出現在[git 1.7.11](https://raw.github.com/git/git/master/Documentation/RelNotes/1.7.11.txt) – xhlwill 2012-12-27 09:21:47

+14

有關最近的git警告'push.default的更多信息,未設置;它的隱含價值在Git 2.0中發生變化,並且與'''匹配'和'simple'有關。請參閱http://stackoverflow.com/questions/13148066/warning-push-default-is-unset-its-implicit-value-is-changing -in-git-2-0 – Nate 2013-02-11 17:30:06

+0

iconoclaust:我不認爲我的編輯完全改變了問題的完整性,並且過時的信息只是需要修復。爲什麼要讓用戶做點擊鏈接的額外工作? – Flimm 2013-11-22 15:50:23

回答

68

你已經總結了你的問題的區別。 upstream推動配置上游分支,而current假定上游分支與當前當地分支具有相同名稱,並推送到該特定名稱。事實上,沒有理由認爲本地分行的上游追蹤分行與本地分行本身的名稱相同。

例如,如果您在多個存儲庫或在許多共同開發遙控器正常工作,你往往最終跟蹤同一分支的不同分支,如allen-mastersusan-master,兩者跟蹤艾倫和蘇珊的回購協議master分支, 分別。在這種情況下,current將是不正確的設置,因爲這些分支名稱不存在於其遙控器上。然而,upstream會工作得很好。

更實際的示例可能是跟蹤developmentproduction存儲庫。您的工作流可能會爲每個分支使用不同的主線分支,但這可能會令人困惑。假設您是代碼集成商,並且想要分別跟蹤兩個存儲庫的master分支。

git checkout -b production --track production/master 
git checkout -b development --track development/master 

現在你有兩個分支跟蹤它們各自的資料庫,這兩者都不使用master命名約定的。關於分支名稱幾乎沒有混淆:他們明確描述了他們跟蹤的內容。儘管如此,push.default = current沒有任何意義,因爲這兩個遠程都不包含developmentproduction分支。

+6

當'upstream'比'current'更受歡迎時,你會舉兩個例子。我認爲這很明顯,所以你應該舉一個相反的例子。 – AndreKR 2013-08-02 00:49:33

+1

@AndreKR AFAIK'current'在你是一個新手開發者的情況下更好,因爲你不需要'git config'特別是如果你從某個地方克隆的話。如果它們不存在,'current'會推動或創建然後推送到遠程repo *上的同名分支*,如果它們不存在,而'simple'將拒絕當同名分支不存在時直接執行此操作已經。 'upstream'在這種情況下具有相同的行爲,除非已經明確設置了上游分支,或者如[Yawar](http://stackoverflow.com/users/20371)的答案中所述設置了上游分支。 – SeldomNeedy 2015-07-23 18:27:18

5

current會將當前分支推送到遠程回購中具有相同名稱的分支。

upstream將推送當前分支到上游分支。

上游分支是一個明確或隱式定義爲當前分支上游的分支。這意味着默認情況下的推拉將與此分支同步。上游分支可能與當前分支本身處於相同的回購倉庫。你可以做一些有趣的事情,比如設置你的本地主分支作爲本地特性(主題)分支的上游,並在它們之間進行推拉。

隱式上游設置通過branch.autosetupmerge配置值完成。您可以在git config幫助頁面找到文檔。顯式上游安裝通過git branch命令的-u選項完成。詳情請參閱幫助頁面。

相關問題