10

プッシュごとにgitを使用してバージョン(各+1)を変更するにはどうすればよいですか?

例私は2つのphpファイルを持っています

libs/lib1.php
libs/lib2.php

通常、各ヘッダーには次のような情報があります。

/**
 * LIB1.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 145
 * @todo something todo
 * @author DAMS
 */

/**
 * LIB2.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 445
 * @todo something todo
 * @author DAMS
 */

プッシュするたびに+1doバージョンを検索して追加できますか?

4

1 に答える 1

13

あなたが求めているのは本質的にキーワードの拡張です。まず、Gitのよくある質問「gitにはキーワード拡張がありますか?」をご覧ください。それは言う:

キーワードの拡張はお勧めしません。キーワードの拡張は、あらゆる種類の奇妙な問題を引き起こし、特にSCMのコンテキスト内では、とにかく実際には役に立ちません。カスタムスクリプトを使用して、gitの外部でキーワード拡張を実行できます。Linuxカーネルのエクスポートスクリプトは、これを実行して、MakefileにEXTRA_VERSION変数を設定します。

本当にこれを実行したい場合は、gitattributes(5)を参照してください。翻訳を元に戻せない場合(SCCSキーワードの拡張など)、問題が発生する可能性があります。(ヒント:提供された$ Id $-expansionは、40文字の16進BLOBオブジェクト名をIDに入れます。このようなスクリプトを使用して、このBLOBが含まれるコミットを特定できます

議論についてはここを、そしてとにかくGITがどのように役立つかについてはここを参照してください。

したがって、gitにはキーワード拡張のようなものがありますが、推奨されていません。また、Gitには「ファイルリビジョン」(あなたの@version番号が表示されるもの)の概念がないため、これではあなたが求めているものを正確に提供することはできません。

または、バージョンをインクリメントするフック(おそらく事前受信フック?)を作成することもできます。これは単なる実行可能ファイルであり(したがって、シェル/ Python / Perl / Ruby /スクリプトで快適なものであれば何でもかまいません)、プッシュを実行すると自動的に実行されます。githooksのマニュアルページを参照してください。

フックスクリプトは次のようになります。

  • 変更しようとしているファイルを特定します。
  • それらの中で、パターンを含むものを見つけてください@version \d+
  • バージョンをインクリメントします。現在ファイルにある値ではなく、親コミットの値をインクリメントしたい!

これは、少なくともGit FAQが推奨するキーワード拡張を使用するのと同じくらい悪いことであり、おそらくもっと悪いことに注意してください。これは、厄介なマージの競合につながる可能性があります。また、特に古いバージョンにバグ修正をコミットする必要がある場合は、コードに誤解を招くバージョン番号が含まれる可能性がありますが、複数のリポジトリ/ブランチからの変更をマージするたびに発生する可能性があります(これはほとんどの場合非常に一般的です) gitワークフロー)注意しない場合。

于 2010-12-26T05:39:58.950 に答える