Git 为什么谷歌回购同步到无头状态

Git 为什么谷歌回购同步到无头状态,git,repo,Git,Repo,因此,在manifest.xml中,您可以为项目指定一个修订,比如说projectfoo的修订主版本。那你呢 repo sync 它下载了ProjectFoo的主分支。但它实际上并没有检查那个分支。更确切地说,它让你处于一种无头状态,不知何故从大师开始。。。?如果我的意图是实际处理同步项目,那么这看起来相当麻烦 我知道它可以很容易地被“修复”,但因为它看起来很反直觉,我猜他们有很好的理由让你在默认情况下处于无头状态。我想在偏离它之前理解预期的工作流程,那么有人能解释它吗?在Git中,“无头状态

因此,在manifest.xml中,您可以为项目指定一个修订,比如说projectfoo的修订主版本。那你呢

repo sync
它下载了ProjectFoo的主分支。但它实际上并没有检查那个分支。更确切地说,它让你处于一种无头状态,不知何故从大师开始。。。?如果我的意图是实际处理同步项目,那么这看起来相当麻烦

我知道它可以很容易地被“修复”,但因为它看起来很反直觉,我猜他们有很好的理由让你在默认情况下处于无头状态。我想在偏离它之前理解预期的工作流程,那么有人能解释它吗?

在Git中,“无头状态”被称为“分离头”

在清单(例如,
.repo/manifest.xml
)中,我们可以看到每个项目都有
版本
。它可以是一个提交(
40a264de45eb035c67aa32d73c767ed7d9378ba2
),一个标记(
refs/tags/v1.0
),一个分支(
refs/heads/master
master
)或任何有效的git-ref(
refs/changes/11/22211/code>)

repo sync
将裸repo克隆到
$coderoot/.repo/projects/
$coderoot/.repo/project对象
,在裸repo中调用
git rev parse
以获得
修订版
的提交,然后
git checkout
$coderoot//code>下的repo中进行此提交,这总是导致头部脱落。看


请注意,这两个命令在两个repo中调用。假设在
$coderoot/.repo/project/foo.git
中有一个分支
master
,在
$coderoot/foo/
中也有一个分支
master
。两个
主机
可能指向不同的提交,并记住允许在现有目录中运行
repo sync
<
$coderoot/foo/
中的code>git checkout master
将提取错误的代码。分支名称不可信,提交不可信。这就是为什么
repo sync
总是检查提交而不是分支。

下载一整套repo的功能非常强大。然而,我发现目前的行为非常有限。想象一下,一个具有大量相关回购的回购林,每个回购都有其分支名称的版本:master-1、master-2等

现在,在运行repo sync之后,您将所有的repo都放在头分离的情况下。是否有一个选项将签出清单文件中指定的分支,即检查同名的现有分支是否正在跟踪远程分支,或仅由创建的本地分支是否正在跟踪远程分支

e、 g.1:repo-1主分支为主分支,具有跟踪分支主分支1 e、 g.2:repo-2主分支为master-2,本地分支为master-2,不跟踪远程分支

在上面的示例中,当repo-2处于头分离状态时,脚本将在master-1分支中显示repo-1