18

私のチームが最初に SVN を使い始めたときは、リポジトリにコミットするときに名前だけを使用していましたが、チームが成長した今、2 人目のMike.

私たちがしたいことは、全員のユーザー名をコンピュータのユーザー名と同じになるように変更することです (名のイニシャル + 姓)。私が見ている問題は、コミット時に SVN 履歴に古いユーザー名が引き続き表示されることです。

リポジトリの履歴全体でユーザー名を変更するためのツールはありますか?

たとえば、現在 Mike に起因するすべてのコミットを msmith に変更し、リビジョン 1 までさかのぼりたいと思います。

最初に考えたのは、ダンプ ファイルの解析と処理を行う必要があるということですが、ツールがあれば便利です。

4

7 に答える 7

21

svndumptoolを使用できます:

svnadmin ダンプ パス/to/my/repo > repo.dump

svndumptool transform-revprop svn:author originalregexp newvalue repo.dump newrepo.dump

于 2009-08-27T15:46:21.467 に答える
13

TortoiseSVNは、この機能を優れた方法でサポートしています。リビジョンログダイアログ内で、作成者でフィルタリングし(正規表現でも)、必要に応じてフィルタリングされたリストからリビジョンを選択し(通常はすべてこの質問のように)、コンテキストから[作成者の編集]を選択しますメニュー。

もちろん、jeroenhsの回答に記載されているように、 pre-revprop-changeフックを配置するという前提条件は引き続き適用されます。

処理はかなり遅いですが、必要に応じて、リポジトリ全体をダンプし、これらの潜在的に巨大なダンプファイルをスクリプトで処理するよりもはるかに高速および/または便利な場合があります。

于 2009-11-04T17:44:18.163 に答える
12

はいあります:

svn propset --revprop -r revision_number svn:author new_username

ただし、svn はデフォルトでリビジョン プロパティの変更を許可していません。そのためにpre-revprop-change フック スクリプトを設定する必要があります。Windows では、次の 1 行だけを含むバット ファイルをリポジトリの hooks フォルダーに配置するだけで十分です。

exit 0

それが設定されている場合は、必要に応じてスクリプトを作成できるはずです。

編集:私はこれをテストしませんでしたが、これはPowerShellでうまくいくはずです:

([xml] ( svn log --xml )).log.logentry 
   | ? {$_.author -eq "Mike"} 
   | foreach {svn propset --revprop -r $_.revision svn:author msmith}
于 2009-07-28T16:57:51.120 に答える
7

リポジトリ サーバーでは、次のことができます。

echo -n "msmith" > msmith.txt
svn log /svn -q | grep '^r[0-9]* | Mike |' | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r

これが何をしているのかです:

  1. 最後に改行なしで新しいユーザー名をファイルに保存します (echo -n)
  2. /svn のリポジトリの完全なログを取得し、概要情報のみを表示します (ログ メッセージではありません) (svn log -q)
  3. Mike (grep) で行を検索します。注: ほとんどの場合、次のようなgrep Mike方法でうまくいきますが、Jul という名前のユーザーがいる場合、7 月に作成されたすべてのコミットを更新するリスクがあります (多かれ少なかれリスクはロケールによって異なります)。
  4. 最初のフィールド (リビジョン番号) を除くすべてを除外 (カット)
  5. ステップ 4 (xargs) で見つかったすべてのリビジョンで svnadmin コマンドを実行します。コマンド (-n1) の実行ごとに 1 つのリビジョンのみを渡します。これにより、svn:author プロパティが msmith.txt ファイルの内容に置き換えられます。
于 2012-08-01T20:43:42.010 に答える
3

第二次世界大戦中の USS バーブの物語であるサンダー ビロウでは、新しい将校が乗り込みます。キャプテンは彼に名前を尋ねます。「マイク」と彼は答える。「いいえ、私たちはすでにマイクを持っています」と船長は言います. 「あなたのことをロバートと呼びましょう。戦闘中、私が命令を発するとき、私が話している相手について混乱することはありません。」

私が理解しているのは、あなたの新しいマイクに別の名前を選ばせる前例があるということです.

于 2009-07-28T17:22:37.153 に答える
2

かなり探しましたが、最終的に SVN ダンプ ファイルに対して機能する perl スクリプトを見つけました。

今朝、リポジトリのダンプで試してみましたが、問題なく動作しました。

直リンクはこちら

于 2009-07-29T13:20:15.487 に答える
-2

メモリから、履歴内の何かを変更するための標準的な SVN の回答は、データベースのテキスト ダンプを作成し、それを検索して置換し、そこからデータベースを再作成することです。

しかし、SVN の内部は 0.x 日以来あまり見ていないので、オフになる可能性があります...

于 2009-07-28T16:55:09.067 に答える