まず、明確化:コミット ID はトップ ツリー (トップ ディレクトリを表す) のコミットに依存し、トップ ツリーの ID はそのメンバーの ID に依存するため、post-commit
フックはコミットでファイルにcommit-id を追加できません。ファイルはその内容に依存します...そしてこの内容にはコミットIDが含まれます。ありえない。
しかし、さまざまなソリューションを見てみましょう。
ライブのサーバー側スクリプト
Web アプリが非裸の git リポジトリからライブでデプロイされている場合 (非裸のリポジトリ、つまりチェックアウト/作業ツリーを含むリポジトリにプッシュすることに関して何をしているのか知っていることを願っています)、Web アプリはgit rev-parse HEAD
(を使用して HEAD をチェックできますコミットのSHA-1を与える)、またはより良いgit describe --dirty
(この--dirty
オプションは、作業領域でコミットされていない変更があるかどうかの情報を含む文字列を返します)、またはgit describe --always HEAD
.
git rev-parse HEAD
のようなもの7611062b4ba6d1ebc4cf3e63c11204a4f5057660
を与えますが、 のようなものをgit describe --dirty
与えますv1.7.3.2-95-g7611062
(つまり、「v1.7.3.2」とタグ付けされたコミットの後に 95 コミットの省略形の SHA-1 でコミットすることを意味7611062
します)、注釈付きタグを使用してリリースにタグを付けることに依存します。
これの変種は、同じファイルシステムの別の場所にあるリポジトリから HEAD をチェックする Web アプリを持つことですgit --git-dir=/path/to/.git describe HEAD
。
補足: Ruby を使用している場合は、おそらくグリットライブラリを使用することをお勧めします。version に相当するgit rev-parse HEAD
ものはおそらく (未テスト!):
require 'grit'
include Grit
repo = Repo.new("/var/git/app.git")
head = repo.commits('HEAD', 1)
app_version = head.id
git チェックアウトから提供されるライブの静的ファイル
編集: セクションが追加されました 2010-10-23 13:33
+0000 非裸の git リポジトリのチェックアウト (ワークツリー) からファイルを提供する場合 (状況ではない)、 gitattributeの「smudge」および「clean」コマンドをfilter
使用して、チェックアウト/チェックイン時に CVS のようなキーワード展開を実行します。
ファイルでは、属性が作用.gitattributes
するファイルを定義します。filter
*.rb フィルター=commitid
たとえば、git config ファイル (たとえば.git/config
) でフィルターを定義します。
[フィルター「commitid」]
smudge = sed -e "s/\$Revision: ?\$/\$Revision: $(git rev-parse HEAD)\$/1"
clean = sed -e "s/\$Revision: ?[^$]*\$/\$Revision: \$/1"
フィルターは、smudge
チェックアウト時に '$Revision: $' を '$Revision: v1.7.3.2-95-g7611062' などに置き換えます (これは、チェックアウトしたファイルにこの CVS のようなキーワードが展開されて含まれることを意味します)。フィルターは、clean
ファイルの内容を git オブジェクト データベース (git リポジトリ内) に保存するときに展開を削除します。そうしないと、ファイルの比較などで問題が発生します。
を使用して展開git archive
代わりに Web アプリをデプロイするため、ライブ リポジトリに常駐せず (プッシュすることに関して癖があり、セキュリティ上の欠点がある可能性があります)、git archive
どこかを使用します (たとえば、アプリを圧縮してアプリにアップロードする)。ホスティング サイト) では、キーワード置換を利用できます。
まず、ファイル内のキーワードを に置き換えることを Git に伝える必要がありますgit archive
。export-subst
ファイルに追加するなど、特定のファイルに設定することでそれを行い.gitattributes
ます
*.rb export-subst
次に、ページフッターを含む/生成するファイルに追加します。
$フォーマット:%H$
これはコミット ハッシュに置き換えられます ( git-logマンページなどの pretty-formats の説明を参照してください)。
展開スクリプトを使用して展開
ある種のスクリプト/スクリプト化されたメカニズムを使用して Web アプリをデプロイする場合は、デプロイ スクリプトにバージョン情報を埋め込むというJefromi のアドバイスに従う必要があります。
Capistranoを post:deploymentに設定する方法 (デプロイに使用すると仮定) を他の誰かに尋ねる必要がありgit describe --always HEAD
ます。そのために使用sed
します。