私は数年前に簡単なCMSを書きましたが、今はこのCMS用に複数のブランチがあり、すべてのブランチから使用されたファイルを更新したいのでバージョン1以降は変更されません。gitバージョンコントロールのすべてのブランチでファイルを更新できますか?
このファイルを更新するにはそれをすべての枝に伝えてください。
私は数年前に簡単なCMSを書きましたが、今はこのCMS用に複数のブランチがあり、すべてのブランチから使用されたファイルを更新したいのでバージョン1以降は変更されません。gitバージョンコントロールのすべてのブランチでファイルを更新できますか?
このファイルを更新するにはそれをすべての枝に伝えてください。
あなたの優先順位によって異なります。
ファイルはこれまで変更されていないので、最初に追加されたコミットは、変更を適用するための新しいブランチを作成するのに適した「共通ルート」である必要があります。それをすべてのブランチにマージします。このアプローチは、プロジェクトの真の歴史を最も反映するでしょう。
もちろん、面倒な点は、マージ操作がたくさんあることです。ブランチがたくさんある場合は、すべてのマージを適用するのが面倒なことがあります(自動化することはできますが、変更していないファイルを変更しているので、競合しないようにしています)。また、これらのマージは各ブランチの履歴に追加されます。それは悪いことではありません - それは再び正確な歴史ですが、 "複雑な"コミットトポロジを嫌う人もいます。それはあなたが考えることを選ぶかもしれない何かです。
もう1つの選択肢は、履歴を書き換えることです。これにはいくつかの潜在的な欠点があります。すべてのコミットID値が変更されます。任意の種類のツールやドキュメントでコミットIDを使用すると問題になる可能性があります。また、レポのクローンを持つ他のユーザーがいる場合は、基本的に「上流のリベース」のような状態から回復する必要があります。さらに、書き直された履歴には、コードが実際にどのように見えるかは歴史のどの時点でも反映されません。しかし、あなたがそれらのことに気にしないなら、これはやりやすく、コミットトポロジーの変更を避けます。
これを行う最も簡単な方法は、filter-branch
です。
git filter-branch tree-filter='cp /some/path/to/new/version worktree/path/to/old/version' -- --all
おそらく速いだろう代わりにtree-filter
のindex-filter
を、使用する方法を考え出すことができます - しかし、非常に簡単ではありません。
ファイルを変更するには、新しいブランチを作成する必要があります。その後、そのブランチを他のすべてのブランチにマージすることができます。これにより、新しいブランチからすべての変更がマージする各ブランチに追加されます。
このブランチは、最も古い共通コミットから開始する必要があります。 – Philippe