2

我正在寻找针对 repo 的 git 存储库集合的 android 系统 (AOSP) 日常构建之间的可重复性以及使用快进合并的影响。

问题在于,在进行日常构建时,您会在其他地方进行开发时获得树梢。如果在推送更改时 HEAD 没有更改,它将进行快进合并并重写时间。因此,3 天前存储库的物理状态实际上与要求 git 返回 3 天不同。

我能看到的主要解决方案是使用带有 --no-ff 的 git 来强制合并提交。这为较小的提交注入了很多噪音,并且似乎被认为是保持干净树的不好做法。

这方面的背景是试图在 android 构建环境中具有可重复性。对于那些不知道的人,一个 android 构建是一个不同的 git 存储库的集合。我的最终用例是我想说,将代码库置于 3 天前开发人员的状态。通过快进合并,我们丢失了一些关于如何关联多个 repo 项目(即:git 存储库)的更改的关键信息。

4

1 回答 1

2

正如您所注意到的,Git 不会随着时间的推移跟踪分支的状态。两个合理的选择是为每个构建设置标签,或者在构建时使用所有签出提交的 SHA-1 创建一个静态清单:

repo manifest -r -o build_20131104.xml

这些文件可以检入清单 git 并使用,例如

repo init -u ... -m build_20131104.xml

重现先前的状态,或者您可以将文件保存在其他位置。

如果您正在执行大量构建(并且 Git 目前在有数千个标签时相当慢),则标记所有 git 会在标签命名空间中乱扔垃圾,但在其他方面非常方便。不要忘记标记清单 git。

于 2013-11-04T05:39:52.187 回答