ソース コード内のファイルにコミットするコミット ID を入力する (基本的には変数の置換) Git フックを作成したいと考えています。これは Git で可能ですか? または、変数を Git ID に解決すると、sha 1 が変更され、「鶏が先か卵が先か」という問題が発生することになります。
ベストアンサー1
同様の状況で私が使用した解決策は次のとおりです。
$Id$
識別したいファイル内のどこかに文字列を配置します(例test.html
)。おそらく、問題が発生しないファイル内のコメント内または他の非機能セクション内です。- で
.gitattributes
、問題のファイルにident
キーワード (例:*.html ident
) のフラグを付けます。
この結果、 がgit checkout
ファイルをオブジェクト データベースから作業ディレクトリにコピーするときに、$Id$
文字列が に展開されて となり$Id: <sha-1 of file>$
、git add
チェックインするときにその変換が元に戻されるため、オブジェクト データベース内のそのファイルのバージョンには のみが含まれており$Id$
、展開された形式は含まれません。
これは始まりですが、残念ながら、特定のハッシュを持つファイルを含むコミットを見つけるのはそれほど簡単ではなく、必ずしも 1 対 1 でもありません。そのため、さらに、それらのファイルに 属性export-subst
(たとえば*.html ident export-subst
)でタグ付けし.gitattributes
、$Format:%ci$ ($Format:%h$)
ファイル内のどこかに のような追加の文字列も追加します。
git checkout
ただし、これらのタグにはgit add
影響しないため、私のリポジトリのバージョンには常にその文字列が正確に含まれます。これらのタグを展開するには、を使用してプロジェクトの特定のバージョンの tar-ball (または .zip) を作成し、それを使用してそのバージョンを展開する必要があります。ファイルをコピーするなど、他の方法ではタグを展開することはgit archive
できません。make install
git archive
例として挙げた 2 つのタグは に展開されますがYYYY-MM-DD HH:MM:SS +TZOFFSET (HASH)
、HASH
この場合の は実際のコミット ハッシュなので、より便利です。
その他の潜在的に有用な指定子は、指定子のヘルプ ページ$Format:$
に記載されています。git log
--pretty-format