为什么 Google repo 同步到无头状态
Why does Google repo sync into headless state
因此,在 manifest.xml 中,您为项目指定了修订版,比如项目 foo 的修订版主。那你
repo sync
并下载项目 foo 的 master 分支。但它实际上并没有检查那个分支。相反,它会让你处于无头状态,不知何故从 master 开始......?如果我打算实际处理同步项目,这似乎相当麻烦。
我知道它可以 "fixed" 很容易,但由于它看起来如此违反直觉,我猜他们有一个很好的理由让你默认处于无头状态。我想在偏离之前了解预期的工作流程,所以有人可以解释一下吗?
"A headless state" 在 Git 中被称为 detached HEAD
。
在清单中(例如,.repo/manifest.xml
)我们可以看到每个项目都有 revision
。它可以是提交 (40a264de45eb035c67aa32d73c767ed7d9378ba2
)、标记 (refs/tags/v1.0
)、分支 (refs/heads/master
或 master
) 或任何有效的 git 引用 (refs/changes/11/22211/1
).
repo sync
将裸仓库克隆到 $coderoot/.repo/projects/
和 $coderoot/.repo/project-objects
,在裸仓库中调用 git rev-parse
以获取 revision
的提交,然后 git checkout
在 $coderoot/
下的回购中提交,这总是导致分离的 HEAD。参见 project.py。
请注意,这两个命令在两个存储库中被调用。假设在$coderoot/.repo/project/foo.git
中有一个分支master
,在$coderoot/foo/
中也有一个分支master
。两个 masters
可能指向不同的提交,请记住它允许在现有目录中 运行 repo sync
。 git checkout master
in $coderoot/foo/
会提取错误代码。分支名称不可信,提交是。这就是为什么 repo sync
总是检查提交而不是分支。
下载一大堆回购的能力很棒。但是我发现当前的行为非常有限。想象一个有大量相关 repos 的 repo 森林,每个都有自己的版本分支名称:master-1、master-2 等
现在在 运行 回购同步后,您拥有 HEAD 分离案例中的所有回购。是否有一个选项可以检查清单文件中指定的分支,即检查具有相同名称的现有分支是否正在跟踪远程分支,或者只是由其创建的本地分支,即不跟踪远程分支。
e.g.1: repo-1 master 分支是master-1,有跟踪分支master-1
例如2:repo-2 master分支是master-2,不跟踪远程分支的本地分支master-2
在上面的示例脚本中,当 repo-2 处于 HEAD 分离状态时,将在 master-1 分支中显示 repo-1。
因此,在 manifest.xml 中,您为项目指定了修订版,比如项目 foo 的修订版主。那你
repo sync
并下载项目 foo 的 master 分支。但它实际上并没有检查那个分支。相反,它会让你处于无头状态,不知何故从 master 开始......?如果我打算实际处理同步项目,这似乎相当麻烦。
我知道它可以 "fixed" 很容易,但由于它看起来如此违反直觉,我猜他们有一个很好的理由让你默认处于无头状态。我想在偏离之前了解预期的工作流程,所以有人可以解释一下吗?
"A headless state" 在 Git 中被称为 detached HEAD
。
在清单中(例如,.repo/manifest.xml
)我们可以看到每个项目都有 revision
。它可以是提交 (40a264de45eb035c67aa32d73c767ed7d9378ba2
)、标记 (refs/tags/v1.0
)、分支 (refs/heads/master
或 master
) 或任何有效的 git 引用 (refs/changes/11/22211/1
).
repo sync
将裸仓库克隆到 $coderoot/.repo/projects/
和 $coderoot/.repo/project-objects
,在裸仓库中调用 git rev-parse
以获取 revision
的提交,然后 git checkout
在 $coderoot/
下的回购中提交,这总是导致分离的 HEAD。参见 project.py。
请注意,这两个命令在两个存储库中被调用。假设在$coderoot/.repo/project/foo.git
中有一个分支master
,在$coderoot/foo/
中也有一个分支master
。两个 masters
可能指向不同的提交,请记住它允许在现有目录中 运行 repo sync
。 git checkout master
in $coderoot/foo/
会提取错误代码。分支名称不可信,提交是。这就是为什么 repo sync
总是检查提交而不是分支。
下载一大堆回购的能力很棒。但是我发现当前的行为非常有限。想象一个有大量相关 repos 的 repo 森林,每个都有自己的版本分支名称:master-1、master-2 等
现在在 运行 回购同步后,您拥有 HEAD 分离案例中的所有回购。是否有一个选项可以检查清单文件中指定的分支,即检查具有相同名称的现有分支是否正在跟踪远程分支,或者只是由其创建的本地分支,即不跟踪远程分支。
e.g.1: repo-1 master 分支是master-1,有跟踪分支master-1 例如2:repo-2 master分支是master-2,不跟踪远程分支的本地分支master-2
在上面的示例脚本中,当 repo-2 处于 HEAD 分离状态时,将在 master-1 分支中显示 repo-1。