14

私がやっていることはかなり単純だと思いますが、それを機能させる方法がわかりません。

2 つの理由から、一意のバージョン番号を html および javascript ファイルに埋め込みたいと考えています。最初の理由は、javascript ファイルがロードされたときに、新しいバージョンがある場合にシステムがキャッシュを使用しようとしないようにしたいということですが、次のようなものを使用してそれを呼び出すことができれば

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

これが決して起こらないことをほぼ確実に保証できます。2 番目の理由は、私のリモート エラー ロギングです。システムのどのバージョンにエラーが発生しているかを把握しておくと、適切な修正を検討できますが、デプロイのたびにこのバージョン番号を手動で更新する必要はありません。

途中で出くわしましgit describeたが、その出力値はこれに非常に適していると思います。

基本的に、javascript と html ファイルのキーを取得して、次GIT-CURRENT-VERSIONの出力に置き換えたいと考えています。git describe

私は展開方法にファブリックを使用しているため、最新バージョンの git を取得した後、サーバー側でこれを行うことは非常に理にかなっています。

sedここではとの組み合わせでgrepうまくいくのではないかと思います。このための 1 つのライナーを見つけ出すことができれば、デプロイ スクリプトに簡単に追加できます。

前もって感謝します!

4

3 に答える 3

9

は聞いたことがありませんfabricが、ファブリックが を使用する (または呼び出す)git archive場合は、 を使用できますgitattributes。つまり、次のような HTML ファイルを作成できます。

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

そして.gitattributes、リポジトリの上に:

*.html    export-subst

次に、でアーカイブを作成するたびにgit-archive$Format:%H$コミットのハッシュに置き換えられます。--pretty-formatで利用できるものは何でも使用できますgit-log

のマニュアルを確認するか、より良いアイデアを得るには、Pro Git ブックの 8.2 Git のカスタマイズ - Git 属性gitattributesの章を参照してください。

于 2012-10-13T22:28:03.207 に答える
5

デプロイされた git ツリーのルートから、次のようなことができます。

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

(これは大雑把なテストにすぎません - 注意して使用してください。)

これにより、ローカルの変更がツリーに残ることに注意してください。

于 2012-10-13T20:40:33.053 に答える
1

guettli のコメントに沿って、私が得た最終結果を投稿すると思いました。上記のMark Longairのソリューションに基づく私のソリューションは次のとおりです。

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 マニュアル ページを参照してください。

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

私の場合、サーバーへの展開にファブリックを使用しているため、これは非常にうまく機能します。変更をリアルタイムで発生させたいため、リポジトリを更新してから、それを新しい展開にコピーしますシステム。システムの準備が整ったら、git データ ファイルを取り除き、これを単なる通常のデータ構造として残します。これで、新しいビルドを使用するようにシステムに指示するだけで、すべての準備が整いました。

同様のことを達成しようとしている他の人に役立つことを願っています!

于 2012-10-30T03:46:08.150 に答える