Mercurialリポジトリ内の多くのファイルは、1回のコミットで移動されましたが、という名前のとしてマークされませんでした。さらに悪いことに、いくつかのファイルも同じコミットで修正されました。コミット後のMercurialリポジトリの名前の変更
チェンジセットをバックアウトして名前を正しく検出し、変更やファイルの移動を維持するにはどうすればよいですか?
Mercurialリポジトリ内の多くのファイルは、1回のコミットで移動されましたが、という名前のとしてマークされませんでした。さらに悪いことに、いくつかのファイルも同じコミットで修正されました。コミット後のMercurialリポジトリの名前の変更
チェンジセットをバックアウトして名前を正しく検出し、変更やファイルの移動を維持するにはどうすればよいですか?
自動MrFoxの答えのバージョンパッチファイルに「悪い」チェンジの
hg addremove -s NN
は、名前の変更を検出する(NNが手によって発見されなければならない、すべての名前の変更は結果で検出する必要がある)、resulを確認するために史編集(別名MQの周りいじくる)の固定は、名前の変更のための代替手段がありますにコミット受けなくなるまでhg status -C
と推測のTSは、adremoveを繰り返します。 Fixrenames拡張機能が使用するロジックとして、手作業手順の概要がhereです。
マニュアルプロセスは次のとおりです。類似度フラグが時々あいを必要とすること
$ hg update n-1
$ hg revert --all --rev n
$ hg addremove -s 70
$ hg commit -m "Fix renames from n"
$ hg merge n
注:存在する各リビジョンNのためにマークされていない名前を変更します。その理由は、名前の変更はほとんど決して純粋な名前変更ではないということです。たとえば、クラスの名前を変更するには、ファイルの変更とファイル名の変更が必要です。したがって、彼らは100%同じではありません。 addremoveの機能を確認し、追加されたファイルに "X(Yから改名)"とマークされていることを確認する必要があります。
このようにして、手作業を一切行うことなく、完全な履歴を回復することができます。私は今日(fixrenames拡張子を使わずに)これをやらなければなりませんでした。修正するのに約5分かかりました。
修正する必要があるスタックチェンジセットがある場合は、この手順を適用することもできます。
チェンジセットグラフは次のようになります。その後、我々はにCをマージ我々は、Aに更新してBにインプレースを元に戻すか、追加・削除を行うと、E.としてコミット
D
|
C
|
B
|
A
まず:A、B、C & D. BとDが間違って名前の変更があったチェンジを考えてみましょうCはそれに何も悪影響を与えていないのでEをFとする。私たちは、今、私たちは余分なヘッドを閉じるには、マージ、FへのアップデートDから元に戻し、追加・削除およびGにコミットD.のために同じことを今すぐ応募
F D
|\|
| C
| |
E B
|/
A
:あなたはこのようなものが表示されるはずです。あなたは、これはあなたが常に
hg diff -r D -r H
あなたのツールによって、あなたは何の違いか、名前が変更されたファイルのいずれかが表示されない表示されますすることができます働いていたことをあなたの自己を説得したい場合
H
|\
G |
| |
F D
|\|
| C
| |
E B
|/
A
:あなたはこのように表示されます違いはありません。
コマンドラインに 'hg merge n'と表示されますが、グラフは' n + 1'とのマージを示していますか? –
すべての変更のリストを作成して、変更前の状態に戻した後、すべてのファイルを手動で更新するのが最も手動の方法です。より自動化されたばかばかしい方法を望んでいました。 –
Mercurialは、変更がどのように異なる必要があるか分かりません。 「名前を変更したのと同じ名前の削除されたファイルや追加されたファイルを置き換える」はありません。 Gitはここでは良いでしょう、それは内容を見て、ファイルを削除して追加するのではなく、おそらくファイル名や何かを変更することをお勧めします。 – MrFox