多数のファイルをさまざまなフォルダーに移動した後、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
両方のファイルで機能します。