用子模块跟踪分支是否可以保护您免受强行推动?

时间:2018-11-22 22:36:23

标签: git github git-submodules

我正在帮助维护一个开源项目,在该项目上我们的子模块破坏了我们的历史构建,因为它们迫使他们接受他们的git repos,因此经常遇到问题。我意识到,可能有正当理由要求您强制推送到公共存储库(例如,出于法规或法律原因,从您的代码库和历史记录中删除代码)。我想知道的是,在使用git子模块来减轻未来受推力影响的风险的同时,我们还能做些什么吗?

我建议我们按分支跟踪子模块,尤其是在这些子模块利用发布分支最佳实践的情况下,但这似乎无济于事。即使在跟踪分支时,git散列仍会提交到我们的存储库,并且如果代码重写了提交历史记录,则有可能从子模块的远程存储库中删除代码。我是否可以假设这意味着跟踪分支机构不会为我们提供额外的保护,以防止日后的部队被逼入?人们还可以使用其他任何技术来避免此问题吗?

参考,不使用分支的子模块更新:https://github.com/apache/incubator-mxnet/pull/13322 子模块更新跟踪分支(请注意,两者均已提交当前的哈希值):https://github.com/apache/incubator-mxnet/pull/13378

1 个答案:

答案 0 :(得分:1)

是否跟踪分支,子模块首先是父存储库中记录的SHA1(gitlink)。

在执行任何git子模块更新--remote --recursive(这将用新的SHA1更新那些SHA1,可能是被强制推送的SHA1)之前,您需要在更新之前跟踪那些SHA1。 / p>

然后您更新并check if the new SHA1 represents forced pushes

git rev-list oldrev ^newrev