我在几年前编写了一个简单的CMS,现在我有多个分支用于此CMS,我想更新从所有分支使用的文件,并且从版本1开始不会更改。
那么我怎样才能更新这个文件并告诉所有分支机构呢?
取决于您的优先事项。
由于该文件以前从未更改过,因此首次添加该文件的提交应该是一个合适的“公共根”,您可以在其中创建一个新分支来应用更改;然后将其合并到所有分支。这种方法最能反映项目的真实历史。
当然,缺点是它有很多合并操作。如果有很多分支,那么应用所有合并可能会很繁琐(尽管你可以自动化它,依赖于你修改一个从未改变的文件的想法,所以你不应该有任何冲突)。这些合并也会添加到每个分支的历史记录中。对我而言,这不是一件坏事 - 这又是准确的历史 - 但有些人不喜欢“复杂”的提交拓扑;所以你可能会选择考虑这个问题。
另一种选择是重写历史。这有几个潜在的缺点。您的所有提交ID值都将更改。如果您在任何类型的工具或文档中使用提交ID,则可能是一个问题。如果有其他用户拥有回购克隆,他们将不得不从基本上大量的“上游rebase”状态恢复。此外,您的重写历史记录无法反映代码在历史记录中的真实情况。但是如果您不关心这些事情,那么这样做更容易,并且避免更改提交拓扑。
因此最简单的方法是使用filter-branch
。
git filter-branch tree-filter='cp /some/path/to/new/version worktree/path/to/old/version' -- --all
你可能想办法使用index-filter
代替tree-filter
,这会更快 - 但不是那么容易。
您应该创建一个新分支来对文件进行更改。然后,您可以将该分支合并到所有其他分支。这会将所有更改从新分支添加到您合并它的每个分支。