1

假设这scratch是一个远程仓库并且bough是这个仓库中的一个分支。这意味着由 打印的行之一git branch -r将是scratch/bough。如果现在我执行

% 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真正含义是什么?

4

2 回答 2

4

merge行指的是远程仓库中存在的引用,而不是本地仓库中的引用。的本地上游分支twig实际上将是refs/remotes/scratch/bough.

并且为了记录,并不是所有的 refs 都作为.git/refs. 您也可以使用打包的 refs .git/packed-refs

于 2013-03-07T22:15:29.757 回答
1
[branch "twig"]
    remote = scratch
    merge = refs/heads/bough

该块的含义如下:本地分支twig设置为在远程有一个上游分支boughscratchscratch/bough远程跟踪分支。因此,例如,当您在其上推动时,twig它将推动到scratch/bough.

于 2013-03-07T22:15:55.037 回答