2010-11-08 19 views
5

如果我做git跟蹤不適用於不同的本地和遠程名稱?

git checkout -b samename origin/samename 

然後跟蹤似乎很好地工作。如果我做後續提交,然後我就可以做

git push 

和git推我提交原產罰款。

但是,如果我這樣做

git checkout -b diffname origin/samename 

然後跟蹤不起作用,儘管親混帳書的這一部分:

$ git checkout -b sf origin/serverfix 
Branch sf set up to track remote branch refs/remotes/origin/serverfix. 
Switched to a new branch "sf" 
Now, your local branch sf will automatically push to and pull from origin/serverfix 

推送操作只是給 「最新的一切」是什麼賦予了?

我在Mac OS上運行git 1.7.1 X

這裏是整個實驗爲那些想嘗試在家裏:

szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git add file1 
szbwood-mbp15:proj4_local bwood$ git commit -m"Created file 1" 
[master (root-commit) 5d50289] Created file 1 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file1 
szbwood-mbp15:proj4_local bwood$ git push origin master:samename 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 225 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /Users/bwood/work/gitplay/proj4_remote.git 
* [new branch]  master -> samename 
szbwood-mbp15:proj4_local bwood$ git checkout -b samename origin/samename 
Branch samename set up to track remote branch samename from origin. 
Switched to a new branch 'samename' 
szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git commit -a 
[samename a7af908] .. 
1 files changed, 1 insertions(+), 0 deletions(-) 
szbwood-mbp15:proj4_local bwood$ git push 
Counting objects: 5, done. 
Writing objects: 100% (3/3), 251 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /Users/bwood/work/gitplay/proj4_remote.git 
    5d50289..a7af908 samename -> samename 
szbwood-mbp15:proj4_local bwood$ git checkout -b diffname origin/samename 
Branch diffname set up to track remote branch samename from origin. 
Switched to a new branch 'diffname' 
szbwood-mbp15:proj4_local bwood$ vi file1 
szbwood-mbp15:proj4_local bwood$ git commit -a 
[diffname c5bbec1] .. 
1 files changed, 1 insertions(+), 0 deletions(-) 
szbwood-mbp15:proj4_local bwood$ git push 
Everything up-to-date 

奇怪的是,該配置文件看起來很好...

[branch "samename"] 
     remote = origin 
     merge = refs/heads/samename 
[branch "diffname"] 
     remote = origin 
     merge = refs/heads/samename 
+0

奇怪的是,.git中的配置文件看起來很好: – bruce 2010-11-08 04:50:13

+0

其實我認爲這本書是錯誤的,並閱讀手冊的推和這個SO帖子http://stackoverflow.com/questions/948354/git push-current-branch爲此增加了重量。看起來好像如果你不公開指定要推送的分支,git會推送所有與遠程名稱匹配的本地分支。如果你不指定遠程,那麼它假定當前分支的遠程。因此,人們經常覺得跟蹤分支意味着你可以用'git push'推動你的改變,但我認爲這是錯誤的。 Git推動推動所有與遠程名稱匹配的本地分支機構。 – bruce 2010-11-08 05:09:22

回答

4

這不是跟蹤。默認情況下,git push根本不使用跟蹤。它將具有匹配名稱的分支推送到指定的遠程。有一個配置參數來控制此行爲:

push.default

定義動作混帳推應該採取如果沒有的Refspec在命令行上給出,沒有的Refspec在遠程配置中,沒有的Refspec是由命令行給出的任何選項隱含的。可能的值爲:

  • 沒有 - 不要推動任何東西。
  • 匹配 - 推送所有匹配分支。所有在兩端具有相同名稱的分支都被認爲是匹配的。這是默認設置。
  • 跟蹤 - 將當前分支推送到其上游分支。
  • 當前 - 將當前分支推送到同名的分支。

同樣,默認是匹配的,所以雖然你必須在你的第一個案例跟蹤設置,它只是匹配的名字,告訴它什麼推動。如果你願意,你當然可以設置push.defaulttracking,並獲得你期望的行爲。

至於你從Pro Git的報價...哇,Pro Git通常是一個很好的資源。我還沒有完整閱讀(我傾向於直接閱讀manpages和源代碼),但是我讀過的所有內容都很棒;我很驚訝地發現即使是一個小小的錯誤!

+0

感謝Jefromi - 很好的解釋。還要感謝你對我以前的git問題提供的幫助 - 始終清晰有效:-) – bruce 2010-11-08 05:17:28

相關問題