为什么 repo sync 没有按照清单 XML 文件中的规定提取正确的提交?

当执行 repo 同步时,它会从分支中提取最新的提交,即使它被指定为清单 xml 文件中的特定提交。为什么会发生这种情况?

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

为什么 repo sync 没有按照清单 XML 文件中的规定提取正确的提交?

这是我在旧提交(标记为“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 都被拉取并出现在我的文件系统中:

为什么 repo sync 没有按照清单 XML 文件中的规定提取正确的提交?

到目前为止一切都很好...

但是,问题是在“app”文件夹下的存储库“repo_example_app”下提取的提交是提交号 89ba93c3ed67cc45d31aedcb9db47d3ea66fb9a1,这是最新的提交,而不是提交 d3cf9feae7396662f4d4d2f1.xml 文件中的提交 d3cf9feae7396662f4d4d3e >

有人可以向我解释我在这里做错了什么吗?

superhsq 回答:为什么 repo sync 没有按照清单 XML 文件中的规定提取正确的提交?

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

  1. https://stackoverflow.com/a/19636869/4441211
  2. https://stackoverflow.com/a/24946287/4441211

让我再详细说明一下: 无需在管理清单“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,它就像一个魅力。

本文链接:https://www.f2er.com/902623.html

大家都在问