WindowsでTortoiseSVNのファイルにキーワードを自動的に追加する

Subversionには、埋め込まれたキーワードを自動的に置き換える機能があります。 この機能を使用すると、たとえば、ファイルを編集した最後のユーザー、改訂、変更日などの情報をファイルに追加できます。

この機能は現在非常に制限されていますが、それでも非常に便利です。 主な制限の1つは、新しいファイルごとにキーワード処理を追加する必要があることです。 名前が変更され移動されたファイルにも同じことが適用されます(SVNはそれらを新規として扱います)。



代替キーワード[1]



マニュアルによると、次の自動置換があります。

 日付 
最終変更日。 $ Date $は次のように置き換えられます
  $日付:2006-07-22 21:42:37 -0700(2006年7月22日土)$ 
 改訂 
変更された最新のリビジョン
 作者 
最近の変更の著者
 ヘッドURL 
リポジトリ内のファイルの最新バージョンへのパス
  Id 
以前の情報の組み合わせは、次のような形式で取得されます。
  $ Id:calc.c 148 2006-07-28 21:30:43Zサリー$ 
ここで、calc.cはファイル名、158は日付と時刻の後のリビジョン、そして作成者です。


私が参加している現在のプロジェクトの1つでは、SQLスクリプトのヘッダーでこれらの自動置換を使用することが決定されました。 特に、これにより、本番サーバーにファイルをバージョン管理し、インストールされているバージョンを表示できるようになります。

最初にファイルにキーワードを追加するのは非常に簡単でした。 TortoiseSVN 1.7では、このプロセスは以前のプロセスよりもさらに単純になりました[2] 。 その後、問題が発生しました-開発者は常に新しいファイルにバージョンを追加しませんでした。 プロジェクトの構造を変更した後、ほとんどのファイルが機能別に編成されていたときに同じことが起こりました。



制限事項



会社のセキュリティポリシーにより、開発者のリポジトリのサーバー側へのアクセスが制限されたため、サーバーフックを使用する可能性はありませんでした。

一部の開発者はインストールされたソフトウェアの限られたセットを持っていますが、それらは実質的な議論なしに拡張するつもりはありません。 たとえば、TSVN 1.6から移行したくない人もいます。



解決策



最も簡単な解決策として、これらの単語を新規および変更されたファイルに追加する自動スクリプトを使用することが決定されました。

誰もがPowerShellをインストールしているわけではないため、BATを使用します。 また、リポジトリに関する情報を取得し、キーワードを追加するために-Subversionコマンドラインクライアント(たとえば、TSVNと共にインストールされます)。

結果は次のスクリプトです。

@echo off title Update tags rem %CD% - current directory :start rem for %%i in (*.tmp) do del %%i del *.tmp > nul svn status "%CD%\Sql" > svn_chg.tmp set CNT=0 :repeat set line="" for /f "eol= tokens=2 delims= " %%i in (svn_chg.tmp) do set line=%%i if "%line%"=="" goto ender if "%line%"=="""" goto ender SET /A CNT=%CNT%+1 echo %CNT%: %line% svn propset svn:keywords "Author Date Revision" "%line%">nul type svn_chg.tmp| find /v "%line%"> svn_chg1.tmp copy /Y svn_chg1.tmp svn_chg.tmp >nul goto repeat :ender del *.tmp > nul echo Press <Enter> to exit... pause
      
      





使用される機能:



%CD%



現在のディレクトリ
for %%i in (*.tmp) do del %%i



ループ内の* .tmpファイルを削除します
svn status "%CD%\Sql" > svn_chg.tmp



Sqlディレクトリ内の変更された/新しいファイルのリストをsvn_chg.tmpファイルに読み込む
for /f "eol= tokens=2 delims= " %%i in (svn_chg.tmp) do set line=%%i



ファイルへのパスを含む部分文字列を取得する(最後の行を取得する)


したがって、開発者は自分のファイルにキーワードサポートを徐々に追加する機会があります。



代替ソリューション



このスクリプトは、Pre-Commitのクライアントフックで使用できます。 また、フックの場合、「svn status」 [3]がないようにこのスクリプトを変更できます。

キーワードの拡張として、 SubWCRev [4]があります。 このユーティリティを使用したソリューションは、最初は提供されませんでした。 スクリプトの使用は想定されていなかったため、すぐに使用できるすべてのものが必要でした。 おそらく、後で移行されるでしょう。

ビルドサーバー(TeamCityがあります)でスクリプトを構成する機会がまだあります。これは、リポジトリに変更を追加することもできます。
  1. svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html
  2. tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html#id597790
  3. tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-settings.html#tsvn-dug-settings-hooks
  4. tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html



All Articles