コミット時に Git コミット ID をファイルに入力するにはどうすればよいですか? 質問する

コミット時に Git コミット ID をファイルに入力するにはどうすればよいですか? 質問する

ソース コード内のファイルにコミットするコミット ID を入力する (基本的には変数の置換) Git フックを作成したいと考えています。これは Git で可能ですか? または、変数を Git ID に解決すると、sha 1 が変更され、「鶏が先か卵が先か」という問題が発生することになります。

ベストアンサー1

同様の状況で私が使用した解決策は次のとおりです。

  1. $Id$識別したいファイル内のどこかに文字列を配置します(例test.html)。おそらく、問題が発生しないファイル内のコメント内または他の非機能セクション内です。
  2. .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 installgit archive

例として挙げた 2 つのタグは に展開されますがYYYY-MM-DD HH:MM:SS +TZOFFSET (HASH)HASHこの場合の は実際のコミット ハッシュなので、より便利です。

その他の潜在的に有用な指定子は、指定子のヘルプ ページ$Format:$に記載されています。git log--pretty-format

おすすめ記事