2009-04-09 18 views
60

開発用コンピュータでユーザー名を設定せずにコミットしました。誰がこれらのチェンジセットをコミットしたかがわかりますので、遡ってユーザ名を変更できますか?水銀変更セットのユーザー名を変更できますか?

+0

次のドキュメントをご覧ください。この文書で扱っている歴史を書き直すことには、いくつかの欠点があります。しかし、それは可能と思われる。 - [編集履歴](http://www.selenic.com/mercurial/wiki/index.cgi/EditingHistory) –

答えて

75

リポジトリを公開していない場合は、あまり難しくありません。 MercurialにはConvert extensionを使用する必要があります。これにより、既存のリポジトリを新しいものに絞り込むことができます。 --authorsスイッチを使用すると、コミットされたコミットごとに著者を編集できます。

リポジトリが公開されている場合は、ユーザへの影響を考慮してください。水銀のWikiには、reasons not to edit historyがあります。

あなた.hgrcに以下の行を追加して拡張を有効にする:

[email protected][email protected] 

[extensions] 
hgext.convert= 

は新しい名前(authors.convert.list)に古い名前をマッピングするためのファイルを書きます変換を実行します。

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

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

+0

とても素敵で完全な答えです。 –

+0

@Andrew Aylett:どのようにチェックしましたか? "$ hg clone myWrongRep name"は、変更を行い、 "$ hg convert --authors theFile myWrongLocalRep"となります。今では ".hg"ファイルを生成し、サイトは "hg status"と何かがあるはずだと言っていますが、何も見つけられません。 "$ hg update"と "$ hg push"を変更しても変更はありません。何が欠けていますか? – hhh

+0

authorsを確認することができます。 hog log --template '{author} \ n' | less'、まだ動作していない - authormapのことを理解していない - – hhh

11

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

私はここで重要なステップを要約し、著者の変更の仕組みを明確にします。最初の間違った著者のコミットがリビジョンBADにあるとします(もちろん、あなたはどこでも変更を公開していません)。

$ hg qimport -r BAD:tip 

(彼らは今.hg/patchesで見つけることができます)

:$ HOME /の.hg/hgrc

[extensions] 
hgext.mq= 

パッチに最近のチェンジセットを変換するには、これを追加することによって、MQを有効にします

「適用を解除する」すべてのパッチBAD前のリビジョンの状態にあなたのリポジトリを取得するには、(それらが適用されてきたと仮定し、それらをリバース):

$ hg qpop -a 

あなたがパッチを見れば、あなたを」 LL著者は、すべてのパッチにコメント行の一種でエンコードされていることを参照してください。

$ 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 

これで完了です。あなたのリポジトリは依然として関連するものとしてリストされているので、プッシュに関する苦情はありません。

+0

"abort:マージリビジョンをインポートできません[リビジョン番号] –

+1

私のコミットの状態を" published "から" draft "に変更する必要がありました – user2428118

+0

閉じる前に'/'が必要でした'perl'コマンドでエラーが返されました'置換置換は-e行1で終わっていませんでした 'それ以外の場合は完璧です、ありがとう! – ederag

6

私はhistedit拡張子を使用しました。これは、 "revert"や "mq"のような新しいreposを作成せずに著者を変更できるようにしました。

まず、あなたのMercurialの設定ファイルでは、ユーザー名が正しく設定されていることを確認し、HISTEDIT拡張可能:

hg histedit -r 40 
:あなたがリビジョン40、使用を変更したい場合は、次に

[ui] 
username = Your Name <[email protected]> 

[extensions] 
histedit = 

表示されるファイルで、リビジョン40に対応する行で、pickという語をeditに変更します。ファイルを保存して閉じます。

今、hg commitです。コミットメッセージを再入力して保存する必要があります。

最後に、hg histedit --continue

コミットに新しいusernameが表示されます。副作用はコミットのタイムスタンプも更新されます。

7

あなたは単一の発信チェンジセットを持っている場合は、これを行うには非常に単純な方法があります:

$ hg ci --amend --user "My Name <[email protected]>" -X "**" 

あなたが任意のローカルな変更がない場合-X "**"オプションを省略することができます。

+0

仕事!(神は私がやっていることを知っている:)) –

関連する問題