代码之家  ›  专栏  ›  技术社区  ›  Milad

是否可以更新git版本控制中所有分支中的文件?

  •  0
  • Milad  · 技术社区  · 7 年前

    几年前我写了一个简单的CMS,现在我有多个分支用于这个CMS,我想更新一个从所有分支使用的文件,并且从版本1起不再更改。

    那么,我如何更新这个文件并告诉所有分支机构这样做呢?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Code-Apprentice    7 年前

    您应该创建一个新分支来更改文件。然后可以将该分支合并到所有其他分支中。这将把新分支中的所有更改添加到您合并它的每个分支中。

        2
  •  2
  •   Mark Adelsberger    7 年前

    取决于您的优先级。

    由于该文件以前从未更改过,因此首次添加该文件的提交应该是一个合适的“公共根”,您可以在该根上创建一个新分支来应用更改;然后将其合并到所有分支。这种方法最能反映项目的真实历史。

    当然,不利的一面是它有很多合并操作。如果有很多分支,应用所有合并可能会很乏味(尽管您可以将其自动化,这取决于您正在修改一个从未更改过的文件,这样就不会有任何冲突)。这些合并也会添加到每个分支的历史记录中。对我来说,这不是一件坏事——这又是一段准确的历史——但有些人确实不喜欢“复杂”的提交拓扑;所以这是你可以考虑的。

    另一种选择是重写历史。这有几个潜在的不利方面。您的所有提交ID值都将更改。如果在任何类型的工具或文档中使用提交ID,这可能是一个问题。如果有其他用户克隆了回购协议,他们将不得不从大量类似“上游再基准”的情况中恢复过来。此外,重写的历史记录不会反映代码在历史上的任何时刻的真实外观。但是,如果您不关心这些事情,那么这样做会更容易,并且可以避免更改提交拓扑。

    所以最简单的方法就是 filter-branch .

    git filter-branch tree-filter='cp /some/path/to/new/version worktree/path/to/old/version' -- --all
    

    您可能会想出一种使用 index-filter 而不是 tree-filter ,这会更快,但不是那么容易。