開発用コンピューターでユーザー名を設定せず、いくつかのコミットを行いました。ユーザー名をさかのぼって変更して、これらの変更セットを誰がコミットしたかを明確にすることはできますか?
リポジトリを公開していない場合、これはそれほど難しくありません。 Convert extension をMercurialに使用する必要があります。これにより、既存のリポジトリを「フィルタリング」して新しいリポジトリを作成できます。 --authorsスイッチを使用すると、各コミットのフィルタリング時に作成者を編集できます。
リポジトリを公開している場合、ユーザーへの影響を考慮してください。Mercurialwikiにはいくつかの 履歴を編集しない理由 。
これらの行を.hgrcに追加して、拡張機能を有効にします。
[extensions]
hgext.convert=
古い名前を新しい名前にマップするファイルを作成します(authors.convert.list):
user@[email protected]
変換を実行します。
hg convert --authors authors.convert.list SOURCE DEST
私はそれをチェックしました、それは私のために働きます:)。
single発信チェンジセットがある場合、これを行う非常に簡単な方法があります。
$ hg ci --amend --user "My Name <[email protected]>" -X "**"
-X "**"
オプションは、ローカルの変更がない場合は省略できます。
いくつかの異なる方法を試しました(- Convert Extension を含みます。これにより、無関係なリポジトリが作成されたことがわかりました)。 Mercurial wikiの説明 MQを使用した編集履歴 は、私が最も役に立ったと思ったものです。 (もちろん、公に知られている履歴を編集することについての通常の警告は悪い考えですが、あなただけが持っているローカルチェンジセットは編集しても問題ありません)。
ここで重要な手順を要約し、作成者を変更するメカニズムを明らかにします。最初の間違った作者のコミットがリビジョンBAD
であると仮定します(もちろん、変更をどこにも公開していない場合)、以下を実行できるはずです(リポジトリのルートにいると仮定します)。 :
これを$ HOME/.hg/hgrcに追加してMQを有効にします
[extensions]
hgext.mq=
最近のチェンジセットをパッチに変換します:
$ hg qimport -r BAD:tip
(現在、これらは.hg/patches
にあります)
リポジトリをBAD
の前のリビジョンの状態にするには、すべてのパッチを「適用解除」します(パッチが適用されていると想定し、それらを元に戻します)。
$ hg qpop -a
パッチを見ると、作成者がすべてのパッチの一種のコメント行にエンコードされていることがわかります。
$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <[email protected]>
次に、お気に入りの検索/置換ツールを使用してパッチを修正します(ここではPerlを使用しています)。コミット名を[email protected]
にしたいとしましょう:
$ Perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
作成者名が正常に変更されたことを確認し、パッチを再適用します。
$ hg qpush -a
次に、適用したパッチを適切なチェンジセットに変換します。
$ hg qfinish -a
これで完了です。リポジトリは引き続き関連としてリストされているため、プッシュについての苦情はありません。
私はhistedit
拡張機能を使用しました。これにより、「convert」のような新しいリポジトリを作成したり、「mq」に頼ったりせずに作成者を変更できます。
まず、Mercurial設定ファイルで、ユーザー名が正しく設定されていることを確認し、histedit拡張機能を有効にします。
[ui]
username = Your Name <[email protected]>
[extensions]
histedit =
次に、リビジョン40を変更する場合は、次を使用します。
hg histedit -r 40
表示されるファイルのリビジョン40に対応する行で、Word pick
をedit
に変更します。ファイルを保存して閉じます。
さて、hg commit
。コミットメッセージを再入力して保存する必要があります。
最後に、 hg histedit --continue
。
コミットは新しいusername
とともに表示されます。副作用として、コミットのタイムスタンプも更新されます。