6

最近、Mercurialリポジトリ内のいくつかのファイルを(モジュールとして)サブディレクトリに移動して、すべてを整理しました。数日後、別のプロジェクトでそのモジュールが必要であることがわかったので、それを独自のMercurialリポジトリに変換しようとしています。

私が直面している問題は、新しいリポジトリの履歴が完全ではなく、名前変更後のファイルの履歴のみが含まれていることです。私が取得している履歴は、実行と同じです。hg log filename必要なのは、の出力のように、ファイルの完全な履歴を取得することですhg log -f filename

私は何が欠けていますか?

ありがとう。

4

1 に答える 1

8

次のような構造があったとします。

main.c
lib1.c
lib2.c

ファイルの名前を変更すると、次のようになります。

main.c
lib/lib1.c
lib/lib2.c

libリポジトリとして次のようなものが必要になります。

lib1.c
lib2.c

サブリポジトリとして含めると、元のリポジトリが名前変更後に行ったように見えるため、この最後の部分を想定しています。

これをいくつかの段階で行います。

最初の段階は、おそらくすでに行っているようにすることです。hg convert --filemap LibTempMap.txt Main LibTempコマンド ラインと の次の内容を使用して、リポジトリを変換しますLibTempMap.txt

exclude *
include lib
rename lib .

これにより、名前変更後の履歴を含むリポジトリが提供されます。

hg convert --rev X --filemap LibMap.txt Main Lib第 2 段階では、名前を変更する前に、コマンド ライン(X は名前を変更する前のリビジョン) と次の内容を使用してリポジトリを変換しますLibMap.txt

exclude *
include lib1.c
include lib2.c

これにより、名前変更前の履歴を含むリポジトリが提供されます。

次に、後の変更をフォルダー内LibTempからLibusingに移植します (リポジトリ内名前変更後のリビジョンはどこにあります)。変換中に名前を変更することにより、ファイル構造が一時リポジトリで同じであることを確認したため、これはきれいに移植されるはずです。hg transplant -s ..\LibTemp Y:tipLibYLibTemp

その後、必要な履歴とファイルを含むリポジトリが残り、Libリポジトリを削除できLibTempます。

于 2012-06-19T18:57:36.887 に答える