1

我为项目中的参与者提供了 Git 配置,这些配置旨在对我和所有合作者表现相同。因此,例如,我们的分支名称匹配并且分支跟踪相同的远程。

最后,我从一个包含我的项目的 Git 存储库开始,然后执行 (1)

git checkout -b dev
git remote add development <dev-repo uri>
git push --set-upstream development dev

创建和配置我们将用于协作的分支和远程存储库。然后我只是指示我的合作者(2)

git clone -o development <dev-repo uri>

一切都按预期工作。特别是,本地存储库“看起来”几乎相同(有助于通信)——除了一个区别:第二个配置 (2) 有一个附加的远程分支:development/HEAD. 这个分支是什么,它是从哪里来的?为什么它不存在于(1)中。它的存在(或不存在)有什么影响吗?

4

2 回答 2

2

你问题的第一部分是一个骗子

这是我对第二部分的猜测:当你克隆一个 repo 时,你正在从头开始构建一个完整的存储库,包括工作目录。如果没有 remote HEAD,git 不知道最初要检查哪个分支——换句话说,git 不知道你的本地HEAD应该是什么,它不知道从哪里获取工作目录的文件。

另一方面,当您将遥控器添加到现有存储库时,您正在添加已经完成的内容。Git 不必关心默认情况下远程会签出哪个分支。你已经有了一个 local HEAD,所以你不需要来自远程的指导。

于 2013-01-29T23:25:09.660 回答
1

HEAD 并不是一个真正的分支,它是一个象征性的参考。在遥控器上,它代表它的实际分支。您可以检查它的内容git symbolic-ref refs/remotes/development/HEAD或只是查看文件.git/refs/remotes/development/HEAD

当您克隆存储库时(默认情况下)该分支将在远程 HEAD ref 指向的本地存储库中签出,除非 master 也在该提交上,因为随后 master 分支被签出,它具有不知何故,优先级更高,至少一年前是这种情况。

为什么它存在于您的存储库中而不存在于另一个存储库中?我不知道,但这并不重要。

于 2013-01-29T23:11:30.857 回答