2

多数のファイルをさまざまなフォルダーに移動した後、2 つのブランチをマージすると、奇妙な結果が得られます。たとえば、最初はmainブランチのルートにあります。

(main)
|-run.py

たくさんのファイルを (with で)移動した新しいブランチ ( move ) を作成しましたhg mv:

(moves)
|-bin/
   |-run.py

2 つのブランチをマージすると、(少なくとも私にとっては) 予期しない結果が得られます ( hg up main && hg merge moves)。基本的に、同じファイルがmainブランチの 2 つの場所に表示されます。

(main)
|-run.py
|-bin/
   |-run.py

単純化されたテストでこれを行うと、期待どおりの結果が得られます。

hg init test
cd test
touch file_a
hg add file_a
hg ci -m 'added file_a'
hg branch movement
mkdir files
hg mv file_a files
hg ci -m 'moved file_a'
hg up default

この時点lsで、単一のファイルが表示されますfile_a

(default)
|-file_a

hg merge movement予想どおり、マージ後はfile_aフォルダーfilesにあり、ルートにはもうありません。

(default)
|-files/
   |-file_a

実際のリポジトリで同じ結果が得られない理由を理解しようとして途方に暮れています。

アップデート

水銀ログを掘り下げて、何が変わったのかを調べます:

>hg status --change 457  -C
A bin/run.py
  run.py
R run.py

したがって、ファイルが移動され、移動が登録されたように見えます。マージ後、2 つのファイルが両方とも存在する場合、ログ ( hg log -f)run.pyはメイン ディレクトリにしか取得できません。それが出力するためbin/run.py: abort: cannot follow file not in parent revision: "bin/run.py". ただし、マージをコミットすると、hg log -f両方のファイルで機能します。

4

2 に答える 2

1

単純化されたテストが示すように、それは適切な動作ではありません。move ブランチの run.py ファイルのリビジョン履歴をチェックして、移動されたという情報があるかどうかを確認します。

于 2013-07-05T08:14:21.893 に答える