web-dev-qa-db-ja.com

Mercurialでディレクトリの名前を変更し、すべてのファイル変更を追跡し続ける方法

ホーム/趣味のいくつかのディレクトリの名前を変更することにしましたPythonパッケージ(docからdocstestからtestsutil to utils)なぜなら、私はそれについてもっと考えたので、新しい名前がより適切だと思うからです。私の一般的な考え方は、コンテナの内容にちなんで名前が付けられている場合、名前は複数の名詞にする必要があります。

次のhg commitの準備ができたので、これらのディレクトリ名の変更についてMercurialに通知する方法を考えています。私は一般的にRCSソフトウェアを初めて使用し、Mercurialを使用してから数か月しか経っていません。 hg statusを実行すると、これらのディレクトリ内のすべてのファイルが削除および追加されていることが表示されるため、hg addremoveを実行すると、これらのディレクトリ内のファイルのすべての変更履歴が失われるのではないかと心配しています。 、または少なくとも変更履歴は断片化され、追跡できなくなります。 hg renameコマンドに出くわしましたが、ドキュメントでは、ディレクトリではなく、個々のファイルでの使用についてのみ説明しています。

Bryan O'Sullivanの「DefinitiveGuide」をさらに読んだ後、おそらくrenameがディレクトリを参照できるようです。

だから、これが私が試してみることにしたことです:

hg rename --after doc docs
hg rename --after test tests
hg rename --after util utils
hg status
hg addremove

これがMercurialのディレクトリの名前を変更するために受け入れられ、推奨される方法であるかどうかを誰かに教えてもらえますか?そうでない場合は、どうすればよいですか?.

36
Don O'Donnell

すでにディレクトリの名前を変更しているので、これはまったく問題ありません。 (Mercurialに名前を変更させると、手動で手順を節約できます。自分で名前を変更してからMercurialに通知するのではなく、hg rename doc docsなど)。

チェックインするファイルが他にない場合、hg addremoveは不要です。 hg statの出力を見ると、「R」(doc/*test/*util/*の場合)および「A」(docs/*などの場合)で始まる行のみが表示されます。

最後に、変更をコミットすることを忘れないでください。

EDIT:言うのを忘れました... hg log --followを使用して、名前変更全体の変更を追跡します。

39
Niall C.

Mercurialにはディレクトリの概念がありません。すべて(ファイルとディレクトリ)をファイルとして扱います。また、私は通常、ファイルやディレクトリの名前を手動で変更することはありません。私はただ使う

hg名前の変更古い名前新しい名前

あなたもそうすることをお勧めします。

Mercurialは名前変更追跡機能を提供します。これは、Mercurialが名前が変更されたファイルの完全な履歴を追跡できることを意味します。これを手動で名前変更した場合、それは不可能です。

ただし、すでに手動で名前を変更しているため、--follow引数とhg logを使用して、履歴を通じてファイルの変更を追跡する必要があります。

個人的にはhg renameを使用するだけで、これが推奨される方法です。

16
user277465

Hgで名前を変更する代わりに--afterを使用する理由の1つは、名前を変更するだけではないリファクタリングツールを使用している場合です。また、参照を修正します。

11
Andrew McKinlay