2013-03-07 50 views
1

假設scratch是遠程回購,bough是此回購的分支。這意味着由git branch -r打印的其中一行將是scratch/bough。如果現在我執行git分支後.git/config的內容-t x y/z

% git branch -t twig scratch/bough 
Branch twig set up to track remote branch bough from scratch. 

,然後檢查的.git/config內容,我看到了一個新的部分已被添加到它:

[branch "twig"] 
     remote = scratch 
     merge = refs/heads/bough 

merge屬性的值可能會導致人們相信,有一個文件.git/refs/heads/bough,但實際上沒有這樣的文件。但有現在文件.git/refs/heads/twig

.git/refs 
├── heads 
│ ├── master 
│ └── twig 
├── remotes 
│ └── scratch 
│  └── HEAD 
└── tags 

這使我認識到,無論是線merge = refs/heads/bough並不意味着爲什麼我認爲它沒有(IOW,該值所指的路徑,相對於.git,一個現有的文件),否則git中有一個非常重要的錯誤。

因此,讓我們假設前者是這種情況。那麼merge = refs/heads/bough這一行真的是什麼意思?

+0

因爲'scratch/HEAD' xD,我只好+1你的問題 – 2013-03-07 22:11:30

回答

4

merge行指的是遠程倉庫中的ref,而不是本地倉庫。本地上游分支twig實際上將是refs/remotes/scratch/bough

並且爲了記錄,並非所有參考文獻都以.git/refs中的文件形式存在。您也可以在.git/packed-refs以上擁有包裝參考。

1
[branch "twig"] 
    remote = scratch 
    merge = refs/heads/bough 

此塊意味着以下內容:本地分支twig被設置爲具有一個上游分支bough上的遠程scratch,即scratch/bough是遠程跟蹤分支。所以例如當你在twig上推動時,它會推到scratch/bough