1

私はすでに Mercurial バージョン管理システムを使用しており、システムが名前の相違について警告しているのを何度か見てきました。

私がしていることは、1 つの大きなファイルの 2 つの異なる子孫を作成することです。たとえばHttpRequest、のラッパーであるという名前のクラスが1つありましたCGI.pm。後でPSGIプロトコルに移行することにしたとき、このファイルの 2 つのコピー、つまりCgi.pmPsgi.pm. 元のクラスはそのまま残り、それを継承する新しいクラスで抽象化されます。

各ファイルは元になったファイルの履歴を保持しているため、このような状況に対処するための好ましい方法だと常に考えていました。しかし、変更をリモート サーバーにプッシュすると、次のように通知されます。

remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 2 changesets with 2 changes to 2 files (+1 heads)
remote: warning: detected divergent renames of lib/HttpRequest.pm to:
remote:  lib/HttpRequest/Cgi.pm
remote:  lib/HttpRequest/Psgi.pm

これは悪いですか?他の方法で行う必要がありますか?

4

1 に答える 1

2

問題は、同じソース ファイルのバージョン管理されたコピーを作成したことではなく、ファイルの名前が毎回異なる名前に変更された 2 つの変更セットがあり、これらの変更セットが同じ開発ラインにないことのようです。この観察は、プルが新しい頭を作成したという事実に基づいています。

したがって、この例では、プルによって新しいヘッドが作成され、その結果、リポジトリ内に 2 つのヘッドがあり、それぞれのCGI.pm名前が別のファイルに変更されていることを Mercurial が警告しています。したがって、これらを 1 つにマージしようとすると、どの変更を残すかを決定する必要があります。

これを防ぐ最も簡単な方法は、名前を変更する代わりに元のファイルをコピーすることです。より正確には、最初に名前を変更することはできますが、それ以降のすべての場合は、代わりにコピーする必要があります (同じ開発ラインでこれを行う場合は明らかであり、後で異なる行をマージするつもりでない場合は必要です)。

Mercurial: The Definitive Guideの関連セクションも参照してください。

于 2012-04-20T12:32:44.283 に答える