1

既知のディレクトリまたはファイルを取得する方法はありますか...古いリビジョンから....そして(後で「移動」されたことを知って)移動された場所を見つけますか?

例。

https:\\myserver.com\Repository1\OldFolderStructure\Folder01\FolderA\MyFile01.txt

(この構造/ファイルはリビジョン 333 に存在します)

.........

svn mkdir "https:\\myserver.com\Repository1\NewFolderStructure\"

svn move "https:\\myserver.com\Repository1\OldFolderStructure\Folder01" "https:\\myserver.com\Repository1\NewFolderStructure" 

svn ls "https:\\myserver.com\Repository1\NewFolderStructure\Folder01" 

.......... (1,000 以上のチェックインがあると仮定しますが、svn の移動はもうありません)、リビジョン 1444 にジャンプします。) ..........

今、リビジョン 333 をチェックアウトすると、このファイル "MyFile01.txt" (またはフォルダー "FolderA") があります。そして、HEADリビジョンのどこに存在するかを把握しようとしています。

「なぜ彼はこれが必要なの?」と思うかもしれません。しなかったらよかったのに。しかし、その改訂履歴を提供するには 30 分かかります。(<< 悪い冗談)。

.........編集..............

それで、いくつかの追加事項。

1 つ: svn info では、新しいホームを見つけるのに十分な情報が得られませんでした。これの主な理由は、ディレクトリのネストでした。私はいくつかのフォルダーを移動しますが、そのフォルダーには複数のレベルでネストされたいくつかのサブフォルダーがあります。

ただし、svn diff を使用すると、多くの情報 (リビジョン 1444 と 333 の間) が得られますが、情報はそこにあります。つまり、svn diff タスクには 33 秒ほどかかりますが、戻ってくると xml に情報があり、それを解析していくつかの単純な DTO オブジェクトに入れています。

2 (同じファイル名の問題):

アイテムの元の場所が次の場合:

https://mySvnServer.com/Repo1/SoccerClubWebSite/scripts/validationRoutines.js

次に、svn diff (詳細) を実行すると、HEAD リビジョンに次の 2 つの項目があります。

<path props="none" kind="file" item="add">https://mySvnServer.com/Repo1/WebSites/SoccerClubWebSite/scripts/validationRoutines.js</path>
<path props="none" kind="file" item="add">https://mySvnServer.com/Repo1/WebSites/CriticalBusinessAppWebSite/scripts/validationRoutines.js</path>

ファイル名が一意でない場所がいくつかありました。

そのため、一致を見つけようとする Uri セグメント マッチャーを作成する必要がありました。

例。上記の 2 つの項目で....最初に URI の最後のセグメントを試します。

validationRoutines.js

その文字列に 2 つの一致があります。したがって、私が懸念しているものを正確に知りません。親フォルダーを取得して使用します。

scripts/validationRoutines.js

まだ2試合。

次に、3 番目の uri セグメントを追加します (右から左へ)

SoccerClubWebSite/scripts/validationRoutines.js

そして今、私はユニークな一致を見つけました.

したがって、私が現在行っていることの基本的なテンプレートは次のとおりです。

(1) svn diff 333:HEAD

(参考までに、これにより大量の情報が返されます)。

(2) xml を解析し、単純な DTO オブジェクトにプッシュします。

(3) その xml 内で「追加」または「変更」されたアイテムを探し、上記のセグメント ロジックに基づいたマッチング システムを使用します。

(3b) 同じファイルが複数回変更された可能性があるため (したがって、xml に複数回 (ただし、同じヘッド svn-path で) 表示される可能性があるため)... GROUP BY (svn-path) を実行する必要がありました。 LINQ group by はここでうまく機能しました。

さらにいくつかの例に対してロジックをテストする必要があります。しかし、あなた、これは些細なことではありませんでした。

4

2 に答える 2

1

CLIの場合、それはより手作業です(またはgawk + ​​grep + ...またはXMLの解析)

CLI に関するいくつかの反復。

トランクで生まれたhello.txtとブランチでの生活を写真とコメントで語る

svn log http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/i18n/ -v --stop-on-copy -q
------------------------------------------------------------------------
r25 | lazybadger | 2010-09-14 20:59:35 +0600 (Вт, 14 сен 2010)
Changed paths:
   D /branches/i18n/Beaujour.txt
   A /branches/i18n/Buongiornor.txt (from /branches/i18n/Beaujour.txt:24)
   A /branches/i18n/Goededag.txt (from /branches/i18n/GuterTag.txt:24)
   D /branches/i18n/GuterTag.txt
------------------------------------------------------------------------
r23 | lazybadger | 2010-07-17 06:05:00 +0600 (Сб, 17 июл 2010)
Changed paths:
   A /branches/i18n/Beaujour.txt (from /branches/i18n/Hello.fr.txt:22)
   A /branches/i18n/GuterTag.txt (from /branches/i18n/Hello.de.txt:20)
   D /branches/i18n/Hello.de.txt
   D /branches/i18n/Hello.en.txt
   D /branches/i18n/Hello.fr.txt
   A /branches/i18n/Hello.txt (from /branches/i18n/Hello.en.txt:20)
------------------------------------------------------------------------
r20 | lazybadger | 2010-07-17 05:23:59 +0600 (Сб, 17 июл 2010)
Changed paths:
   A /branches/i18n/Hello.en.txt (from /branches/i18n/Hello.txt:19)
   D /branches/i18n/Hello.txt
------------------------------------------------------------------------
r19 | lazybadger | 2010-07-17 05:22:16 +0600 (Сб, 17 июл 2010)
Changed paths:
   A /branches/i18n/Hello.de.txt
   A /branches/i18n/Hello.fr.txt
------------------------------------------------------------------------
r18 | lazybadger | 2010-07-17 05:11:40 +0600 (Сб, 17 июл 2010)
Changed paths:
   A /branches/i18n (from /trunk:17)
------------------------------------------------------------------------

r18 - /trunk/hello.txt は /branches/i18n/hello.txt として識別される必要があります (変更されたパス文字列で "from /trunk" が検出されました)

r20 - 「from /branches/i18n/Hello.txt」によると、ファイル名は /branches/i18n/Hello.en.txt です

r23 - 「from /branches/i18n/Hello.en.txt」によると、/branches/i18n/Hello.txt に返されるファイル名

XML バージョン

>svn log http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/i18n/ -v -q --xml -r 18 -r 20 -r 23
<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
   revision="18">
<author>lazybadger</author>
<date>2010-07-16T23:11:40.388125Z</date>
<paths>
<path
   action="A"
   prop-mods="true"
   text-mods="false"
   kind="dir"
   copyfrom-path="/trunk"
   copyfrom-rev="17">/branches/i18n</path>
</paths>
</logentry>
<logentry
   revision="20">
<author>lazybadger</author>
<date>2010-07-16T23:23:59.075625Z</date>
<paths>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   action="D">/branches/i18n/Hello.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   copyfrom-path="/branches/i18n/Hello.txt"
   copyfrom-rev="19"
   action="A">/branches/i18n/Hello.en.txt</path>
</paths>
</logentry>
<logentry
   revision="23">
<author>lazybadger</author>
<date>2010-07-17T00:05:00.997500Z</date>
<paths>
<path
   prop-mods="true"
   text-mods="false"
   kind="file"
   copyfrom-path="/branches/i18n/Hello.fr.txt"
   copyfrom-rev="22"
   action="A">/branches/i18n/Beaujour.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   copyfrom-path="/branches/i18n/Hello.de.txt"
   copyfrom-rev="20"
   action="A">/branches/i18n/GuterTag.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   copyfrom-path="/branches/i18n/Hello.en.txt"
   copyfrom-rev="20"
   action="A">/branches/i18n/Hello.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   action="D">/branches/i18n/Hello.en.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   action="D">/branches/i18n/Hello.fr.txt</path>
<path
   prop-mods="false"
   text-mods="false"
   kind="file"
   action="D">/branches/i18n/Hello.de.txt</path>
</paths>
</logentry>
</log>

パス ノードcopyfrom-pathでファイル名またはディレクトリをチェックし、同じノードaction="A"パラメータ内で新しいファイル名をチェックします。優れた XML ツリー パーサーにとっては大した仕事ではありませんが、私はプレーン テキストと目を好むでしょう

于 2013-03-04T05:11:49.793 に答える
1

通常は TortoiseSVN ログ ビューアーを使用します。次の手順を実行します。

  • ファイルがあった、または現在入っていることが確実なディレクトリで開きます。最悪の場合、ルートから始めます(例のように)。
  • ファイル名の一部を検索ボックスに入力します。これは正規表現であることに注意してください。したがって、 を検索するMyFile01.txtには、 を入力しMyFile01\.txtます ( の前にバックスラッシュを付け.て、ポイントが文字ではなく文字として認識されるようにします)。
  • ログ ビューアに、ファイルに関連するすべてのリビジョンが一覧表示されるようになりました。ファイルの移動がすぐにわかるはずです。ファイル名自体が赤で強調表示されます。移動自体は(Subversion には移動のステータスがありません)deleteと組み合わせてダイアログに表示されます。add

file を使用して例を作成しましたreadme.txt。この結果のダイアログ(ファイルを作成して移動した後)は次のようになります。

ここに画像の説明を入力

ご覧のとおり、強調表示されたテキスト (赤) は、選択したエディションの削除されたファイル (最後の行) と追加されたファイル (2 行目) を示しています。これは、TortoiseSVN が動きを示す方法です。

詳細については、ドキュメントの「ログ メッセージのフィルタリング」を参照してください。

svn logコマンドを使用して同様のことが可能です (最初の部分については、ドキュメントを参照してください。

  • 日付とディレクトリによるフィルタリング
  • 2 つ目 (ログ メッセージまたはファイル名の一致によるフィルタリング) はgrep、Unix / Linux / MacOS X のコマンドなどで取得する必要があります。つまり、オペレーティング システム (Windows?) とシェルのスキルによって異なります。
于 2013-03-01T17:33:46.323 に答える