【问题标题】:Does tracking a branch with a submodule protect you against force pushes?使用子模块跟踪分支是否可以保护您免受强制推送?
【发布时间】:2018-11-22 22:36:23
【问题描述】:

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

我建议我们按分支跟踪子模块,尤其是在这些子模块利用发布分支最佳实践的情况下,但这似乎无济于事。即使在跟踪分支时,git 哈希仍然会提交到我们的仓库,如果他们重写提交历史,代码可能会从我们的子模块的远程仓库中删除。我是否正确地假设这意味着跟踪分支不会为我们提供任何额外的保护以防止未来的强制推送?有没有其他技术可以用来避免这个问题?

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

【问题讨论】:

    标签: git github git-submodules


    【解决方案1】:

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

    在执行任何 git submodule update --remote --recursive 之前(这会用新的 SHA1 更新那些 SHA1,可能是强制推送的),您需要跟踪这些 SHA1 before 更新。

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

    git rev-list oldrev ^newrev
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2017-12-10
      • 2017-07-23
      • 1970-01-01
      • 2022-11-13
      • 2017-03-10
      • 2020-09-26
      • 2014-02-04
      • 2012-10-07
      相关资源
      最近更新 更多