0

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

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

清单存储库中的两个提交

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

<?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.

结果是两个存储库都已被提取并出现在我的文件系统中: 存储库同步后的父存储库文件系统视图

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

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

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

4

1 回答 1

1

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

  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,它就像一个魅力。

于 2021-02-18T17:02:30.373 回答