2012-10-13 13 views
11

私がやっていることはかなりシンプルだと思いますが、それを動作させる方法を理解できないようです。デプロイメント中にgitリビジョン番号をファイルに挿入する

htmlとjavascriptファイルに固有のバージョン番号を埋め込みたい理由は2つあります。第一の理由は、私はjavascriptのファイルがロードされたときに新しいバージョンがある場合、システムはキャッシュを使用しようとしないことを確実にしたいということですが、私は

<script src="/app.js?v1.0.1-1-95425234"></script> 

のようなものを使用してそれを呼び出すことができれば私はこれが決して起こらないことをほぼ確実に確信できます。 2番目の理由は、リモートエラーのログ記録で、システムのどのバージョンにエラーがあるのか​​を知って、適切に修正することができますが、すべての展開でこのバージョン番号を手動で更新する必要はありません。

私は道に沿ってgit describeに出くわしました、そして、私はそれが本当にこれに適していると思います。

基本的に私は私が私の展開方法のための生地を使用していますので、これはに多くの意味になるだろうGIT-CURRENT-VERSIONように私のJavaScriptとHTMLファイル内のキーを取り、git describe

の出力とそれを交換したいです私たちがgitの最新バージョンを手に入れた後で、サーバー側でやってください。

私はsedgrepの組み合わせがここではうまくいくと思っていますが、これに対して1つのライナーを見つけ出すことができれば、本当に展開スクリプトに追加するのは簡単でしょう。

ありがとうございます!

+0

どのWebフレームワークを使用しますか?私は "GIT-CURRENT-VERSION"の再帰的置換のような優れた解決策があると思います。 – guettli

+0

guettli - 私は使用し終わったものを投稿しました。それが役に立てば幸い! –

答えて

5

あなたの展開のgitツリーのルートから、以下のような何かができます:

export VERSION="$(git describe)" 
find . -type f -print0 | xargs -0 sed -i "s/GIT-CURRENT-VERSION/$VERSION/g" 

(それは通り一遍のテストを唯一持っています - 注意して使用します。)それはあなたの木を残すこと

注意を局所的な変更を加えたものです。

9

fabricは聞いたことがありませんが、ファブリックがgit archiveを使用(または呼び出し)する場合は、gitattributesを使用できます。リポジトリのトップに

<script src="/app.js?$Format:%H$"></script> 

そして.gitattributes中:

*.html export-subst 

を次に、あなたはgit-archiveでアーカイブを作成するたびに、$Format:%H$がされることは、あなたのようなものを使用してHTMLファイルを持つことができ、ありますコミットのハッシュに置き換えられました。 --pretty-formatで利用可能なものはgit-logに使用できます。より多くのアイデアを得るために章8.2 Customizing Git - Git AttributesPro Gitの書籍:

gitattributesの手動、またはより良いを確認してください。

1

guettliのコメントに沿って、私は最終結果を投稿したと思った。上記のマーク・ロングエアのソリューションに基づいた私の解決策があります。

export DESCRIPTION="$(git describe)" 
find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0 | xargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g" 

私がここで何をしているのか少し説明します。

export DESCRIPTION="$(git describe)" gitリポジトリの現在の状態の現在の説明を取得します。詳細については、git describe Manual Pageをご覧ください。

次に、find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0[PATH]に置き換えて、リポジトリのパスを指定します。 -regextype posix-extended -regex ".*\.(js|html)"はあなたのディレクトリに降りて、".*\.(js|html)"で定義された正規表現に一致するすべてのファイルを見つけます。私の場合、javascriptやhtmlファイルで置き換えを行うことだけを望んでいます。最後にxargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g"は、CURRENT-GIT-DESCRIPTIONを上記のgit describeで定義された値に置き換えるようにシステムに指示します。

私の場合は、サーバにデプロイするのにfabricを使用しているので、これはかなりうまくいきます。また、変更をリアルタイムで行うために、リポジトリを更新してから、システムの新しい展開。システムの準備ができたら、gitのデータファイルを取り除いて、これを単なる通常のデータ構造として残します。今では、新しいビルドを使用するようにシステムに指示するだけで、すべての準備が整いました。

似たようなことを達成しようとしている他の人に役立つことを望みます。