74

開発用コンピューターにユーザー名を設定せず、いくつかのコミットを行いました。誰がこれらの変更セットをコミットしたかが明確になるように、ユーザー名をさかのぼって変更できますか?

4

4 に答える 4

84

リポジトリを公開していない場合、これはそれほど難しいことではありません。Convert 拡張機能を Mercurialに使用する必要があります。これにより、既存のリポジトリを「フィルタリング」して新しいリポジトリを作成できます。--authors スイッチを使用すると、フィルター処理された各コミットの作成者を編集できます。

リポジトリを公開している場合は、ユーザーへの影響を考慮してください。mercurial wiki には履歴を編集しない理由がいくつかあります。

次の行を .hgrc に追加して、拡張機能を有効にします。

[extensions]
hgext.convert=

古い名前を新しい名前にマップするファイルを作成します (authors.convert.list):

user@ubuntu=real.name@my.example.com

変換を実行します。

hg convert --authors authors.convert.list SOURCE DEST

私はちょうどそれをチェックしました、それは私のために働きます:)。

于 2009-04-16T19:09:56.757 に答える
14

私はいくつかの異なる方法を試しました(無関係なリポジトリを作成したことがわかったConvert Extensionを含む)。MQ を使用して履歴を編集するための Mercurial wiki の手順は、私が最も役に立ったものでした。(もちろん、公に知られている履歴を編集することにはよくある注意点がありますが、それは悪い考えですが、あなただけが持っているローカルチェンジセットは編集してもかまいません)。

ここでは、重要な手順を要約し、作成者を変更する仕組みを明確にします。最初の間違った作成者のコミットがリビジョンにあると仮定すると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 <f.lastname@oops.wrongurl.example.com>

お気に入りの検索/置換ツールを使用してパッチを修正します (ここでは Perl を使用しています)。コミット名を次のようにしたいとしましょうf.lastname@righturl.example.com:

$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff

作成者名が正常に変更されたことを確認し、パッチを再適用します。

$ hg qpush -a

次に、適用されたパッチを適切な変更セットに変換します。

$ hg qfinish -a

これで完了です。リポジトリは引き続き関連としてリストされているため、プッシュについて苦情を受けることはありません。

于 2013-10-15T03:43:58.337 に答える