为什么 repo sync 不提取清单 XML 文件中指定的正确提交?

Why does repo sync not pull the correct commit as specified in the manifest XML file?

执行回购同步时,它会从分支中提取最新的提交,即使它被指定为清单 xml 文件中的特定提交。为什么会这样?

清单 xml 文件在名为 repo_example_manifest 的存储库中进行修订控制,该存储库有两个提交:

这是我在旧提交(标记为“v1.0”)中调用 default.xml 的清单 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="organization"
           fetch="https://github.com/organization" />

  <project path="bsp" name="repo_example_bsp" remote="organization" revision="master" >
  </project>
  <project path="app" name="repo_example_app" remote="organization" revision="d3cf9feae739666b1e302f4831eca432afd746fd" />
</manifest>

这是最新提交中的清单 xml 文件(标记为“v2.0”):

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="orgnanization"
           fetch="https://github.com/orgnanization" />

  <project path="bsp" name="repo_example_bsp" remote="orgnanization" revision="master" >
  </project>
  <project path="app" name="repo_example_app" remote="orgnanization" revision="89ba93c3ed67cc45d31aedcb9db47d3ea66fb9a1" />
</manifest>

如您所见,我只有两个使用 git-repo:

管理的存储库
  1. repo_example_bsp
  2. repo_example_app

我只是以此为例,在将其与我公司的项目集成之前先试用一下 git-repo。

在存储库“repo_example_app”下,我有两个提交。最近的提交是 89ba93c3ed67cc45d31aedcb9db47d3ea66fb9a1,最旧的提交是:d3cf9feae739666b1e302f4831eca432afd746fd.

当我在 repo_example_manifest 中最旧的提交(标记为“v1.0”)时,我在 bash 中执行了以下操作:

$ repo init -u https://github.com/organization/repo_example_manifest

输出是:

Downloading manifest from https://github.com/organization/repo_example_manifest

repo has been initialized in C:\Users\Eyal\Documents\repo_example_manifest
Downloading Repo source from https://gerrit.googlesource.com/git-repo

然后我发送命令:

repo sync

输出为:

repo sync has finished successfully.

结果是两个 repos 都已被拉取并出现在我的文件系统中:

到目前为止一切顺利...

但是,问题是在文件夹“app”下的存储库“repo_example_app”下提取的提交是提交号 89ba93c3ed67cc45d31aedcb9db47d3ea66fb9a1,这是最新的提交,而不是提交 d3cf9feae739666b1e302f4831eca432afd746fd XML 文件。

谁能给我解释一下我做错了什么?

我做了更多的挖掘,发现有人问了类似的问题,那里提供的答案实际上解决了我的问题。我用来解决问题的答案是:

让我详细说明一下: 无需为了同步而在管理清单“repo_example_manifest”的存储库上从一个提交转换到另一个提交。那行不通的。 相反,要从一个版本的清单“过渡”到另一个版本,您必须使用 repo init。 就我而言,我使用 repo init -u https://github.com/organization/repo_example_manifest 但添加了 -b <LOCATION>.

LOCATION 可以是:

  • 分支名称 - 在这种情况下,将采用该分支的最新提交。如果您要从中获取清单的提交来自较旧的提交,那么这不会让您到达那里。请参阅下面的其他两个选项:
  • 标签名称 - 您可以用标签标记要从中获取清单的提交,然后只需将 LOCATION 替换为:refs/tags/<tagname>
  • 特定提交 - 您可以简单地获取任何您想要的提交,即使它没有被标记,只需将 LOCATION 替换为整个提交 ID SHA。

完成 repo init -u https://github.com/organization/repo_example_manifest -b <LOCATION> 后,只需输入 repo sync,它就会非常有效。