为什么 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:
管理的存储库
- repo_example_bsp
- 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
,它就会非常有效。
执行回购同步时,它会从分支中提取最新的提交,即使它被指定为清单 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:
管理的存储库- repo_example_bsp
- 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
,它就会非常有效。