ident $Id$
Git リポジトリ内のファイルを有効にするにはどうすればよいですか?
4 に答える
概要:製品にバージョン情報を埋め込む推奨される方法は、ビルド システムを使用することです。詳細と代替アプローチについては、以下を参照してください。
Git では (通常、アトミック コミットを使用する他の VCS システムでも同様だと思います)、version of a single fileのようなものはありません。
$Id:$
Git はキーワードのオンデマンド拡張をサポートしていますが、次の点に注意してください。
- リクエストに応じてのみ行われます。ファイル(または一連のファイル)に
ident
属性セットがあることを(おそらくグロビングパターンを使用して)指定する必要があります(ツリーの「.gitattributes」ファイル、またはローカルリポジトリ設定の場合は「.git/info/attributes」)。 - ファイルの内容の SHA-1 (より正確には)に展開され
$Id:<sha-1 of blob>$
ます。この選択の理由は、Git がブランチの切り替えまたは巻き戻し中に変更されていないファイルに触れないためです。'$Id:$' がリビジョン情報に展開された場合、ブランチを切り替えるときなど、バージョン管理されたすべてのファイルを更新する必要があります。
Git は、$Format:...$
コミット情報に拡張される非常に幅広いプレースホルダーのセットをサポートしています (たとえば$Format:%H$
、コミット ハッシュに置き換えられます)。
- 展開は、その出力ファイルでgit archiveを実行している場合にのみ行われます。
- リクエストに応じて実行され、
export-subst
属性を介して制御されます。
バージョン情報を埋め込む推奨される方法は、(ビルド段階で)ビルド システムを介して行うことです。たとえば、Git Makefileおよびgit.git リポジトリの Git Web インターフェイスで Makefile によって使用されるGIT-VERSION-GENスクリプトを参照してください。
ただし、clean/smudge フィルター ドライバーを (属性を介して) (ab) 使用して、filter
CVS のようなキーワード展開を取得し、チェックアウト時にキーワードを展開し、コンテンツをリポジトリに入力するときにそれらをクリーンアップすることができます。
これを行うには、この機能が必要なファイルの後にファイル内にパターンを追加しident
ます.gitattributes
。これにより、ファイルのチェックアウト時に$ Id$が$Id:<40桁のSHA>$に置き換えられます。ただし、CVS/SVNのようにファイルのリビジョン番号は表示されないことに注意してください。
例:
$ echo '*.txt ident' >> .gitattributes
$ echo '$Id$' > test.txt
$ git commit -a -m "test"
$ rm test.txt
$ git checkout -- test.txt
$ cat test.txt
Git の ident は、他のバージョン管理システムで $Id$ が行うことを行いません。コツとして、RCS を git と一緒に使用します。個々のファイル リビジョンには RCS を使用し、プロジェクト全体のチェックポイントには git を使用します。私が言ったように、これはクラッジですが、ちょっと理にかなっています (場合によっては)。