テキスト ファイルでは、これを行うだけで済みます。
$Revision$
$Author$
Subversion がチェックアウトを行うと、次のように変更されます。
$Revision: 1234$
$Author: Quimby$
最初にキーワードのタイトルを付ける必要はありません。
svn:keywords
Subversion でキーワードを展開する場合は、設定する必要があります。svn:keywords
プロパティの値は、空白で区切られた裸のキーワードとして、大文字と小文字が正しく区別されている必要があります。である必要が$Id$
あり$ID$
ます。
つまり、svn:keywords
プロパティを次のように設定する必要があります。
Revision Author Date Id
ではない
$Revision$ $Author$ $Date$ $Id$
キーワード使用上の注意
また、私がこれを展開しているエンド ユーザーは、Subversion 構成ファイルを編集する必要がありますか、それとも WC のファイル/ディレクトリにキーワードを設定することだけを心配する必要がありますか?
はプロパティであるためsvn:keywords
、すべての作業コピーに設定されます。チェックアウトを行うと、展開されたキーワードが表示されます。
問題は、誰かが新しいファイルを追加した場合にどうなるかということです。あなたsvn:keywords
もそれらを設定したいのです。Subversion バージョン 1.7 以前では、これらのプロパティがファイルの特定の値に設定されていない場合、コミットを失敗させるために pre-commit フックを使用する必要がありました。
開発者は、ファイルにこのプロパティを設定していないためにコミットが拒否された後、Subversion 構成のautopropセクションで設定できます。このようにして、新しいファイルを追加すると、Subversion は自動的にプロパティを追加します。
Subversion 1.8 では、継承可能なプロパティが導入されました。主なものはsvn:autoprop
との 2 つsvn:global-ignores
です。これらの 2 つのプロパティは、ユーザーの構成のglobal-ignoresおよびautopropセクションを置き換えることができます。これらは、ユーザーの構成を気にせずに、リポジトリ全体に対してこれを行う方法です。
ただし、キーワードはそれほど役に立ちません。それらは通常、光よりもはるかに多くの痛みを引き起こします (そして$Log$
、 はまったく悪です)。
キーワードはどのような情報を提供しますか? 作業コピー内にいる場合は、Subversion コマンドを実行するだけで、キーワードが持つすべての情報を取得できます。
作業コピーの外では、通常、キーワードはコンパイル段階で消えます。キーワードを文字列に埋め込んだとしても、それはそのファイルのそのバージョンのみであり、残りのファイル バージョンはわかりません。より良い方法は、全体的に意味のあるバージョン文字列を埋め込むことです。たとえば、プログラム全体のバージョン番号です。Jenkins のような CI システムを使用している場合、これは非常に簡単に実行できます。実際、コードをコンパイルするときに、Jenkins プロジェクトとビルド番号 (および作業コピーのリビジョン) を埋め込みます。
スクリプトの方が便利かもしれませんが、簡単に欺くことができます。その Python スクリプトのリビジョンがファイルに埋め込まれた Python スクリプトを想像してみてください。バグが発見され、誰かがファイルを変更します。埋め込まれたキーワードが誤解を招くようになりました。このスクリプトに新しい機能を追加する必要があるとしましょう。開発者はスクリプトのリビジョン番号を確認してチェックアウトし、機能を追加してから、その新しいバージョンを顧客に返します。これで、元のバグがプログラムに戻ってきました。
これが、多くのバージョン管理システムがキーワードを削除した理由です。キーワードを削除した場合は、ファイルごとに 1 つずつ有効にする必要があります。それらはコンパイルで問題を引き起こす可能性があり (これは特に、キーワードが記号で囲まれた単一の文字である SCCS で当てはまり、%
偶発的な展開のいくつかの事件を引き起こしました)、誤解を招く可能性があり、最新のバージョン管理システムではそれほど必要ではありません。
すべてのファイルにキーワードを埋め込む前に、戦略を慎重に検討してください。