背景分割後のMercurialにファイル接続を破る:不良ファイルが
は、最初にファイルbase.c
があった、そのファイルは1つのブランチのみBase
を持っていたリポジトリにあったが。
Base
を分枝してExtended
ブランチとした。その後、この新しいブランチにはbase.c
にいくつかの変更が加えられました。
base.c
のBase
にバグが修正された場合は、Extended
にマージされます。
base.c
Extended
ブランチにあまりに多くのものを追加するのは良い考えではないので、ファイルはext.c
にコピーされています。次に、Extended
の付加の大部分がbase.c
から削除され、Base
の機能がext.c
から削除されます。したがって、この時点でbase.c
のExtended
は、Base
と非常によく似ています。
問題:彼らは共通の歴史を共有しているためファイルが分割された
、Mercurialは、ext.c
はbase.c
のコピーであることを知らされました。残念ながら、これは良い考えではありませんでした。
Base
枝の上に固定され、
Extended
にマージされている場合、Mercurialは後者がもはや元に任意の類似性を持っているにもかかわらず、それらの変更は
base.c
と
ext.c
の両方に適用されるべきであると考えています。これは非常に迷惑なマージになります。
ext.c
はbase.c
と同じではないとMercurialに伝える方法はありますか? 1つの解決策は、ext.c
を新しいファイルに置き換えることですが、その後の履歴は従いません。
興味深い問題です。あなたは 'hg copy'でコピーを作ったと思いますか? – icabod
はい 'hg copy'が使用されました。 – user694733
'もしhgがext.c'を忘れてしまったら、それを新しいファイルとして' hg add 'すると接続が壊れる可能性がありますが、この時点までにすべての履歴を失うでしょう。しかし、 'extの_earlier_バージョンを追加することができます。c '(おそらくリネームの前に)、再生(グラフト)することができます。 – alexis