我正在寻找android系统(AOSP)每日构建与repo的git存储库集合之间的可重复性以及使用快进合并的影响。
问题在于,在进行日常构建时,您将获得一个树顶,而其他地方正在进行开发。如果在推送更改时HEAD没有更改,它将执行快进合并,并且将重写时间。因此,3天前存储库的物理状态实际上与要求git返回三天不同。
我能看到的主要解决方案是使用git和--no-ff强制进行合并提交。这为较小的提交注入了很多噪音,并且在保持干净的树时似乎被认为是不好的做法。
这背景是试图在Android构建环境中具有可重复性。对于那些不知道的人,android构建是一个不同的git存储库的集合。我的最终用例是我希望能够说,将代码库置于3天前的开发人员状态。通过快速合并,我们会丢失一些关于如何关联多个repo项目(即:git存储库)的更改的关键信息。
答案 0 :(得分:2)
正如您所注意到的,Git不会随着时间的推移跟踪分支的状态。两个合理的选择是为每个构建设置标记,或者在构建时使用所有已检出提交的SHA-1创建静态清单:
repo manifest -r -o build_20131104.xml
可以将这些文件检入清单git并使用,例如。
repo init -u ... -m build_20131104.xml
重现先前状态,或者您可以将文件保存在其他位置。
如果您正在进行大量构建(并且Git目前使用数千个标签的速度相当慢),则标记所有gits来标记命名空间,否则非常方便。不要忘记标记清单git。