1

このトピックに関するいくつかの投稿を読んで、キーワード置換の使用に反対するいくつかの短所があることに気付きました. それにもかかわらず、次の問題を解決する方法が必要であり、誰かが git を使用してこれを解決する方法についてアイデアを持っていることを願っています (キーワード置換を使用するかどうかにかかわらず):

VCS として git を使用するメイン アプリケーションがあります。このメイン アプリケーションの一部 (XML ファイルの特定のセット) は、私が git (別のリポジトリ) も使用するユーティリティによって使用されています。

現在、メイン アプリとユーティリティのリリース サイクルは異なります。新しいバージョンのユーティリティをリリースするたびに、メイン アプリケーションから最新の XML ファイル セットをコピーしています。ユーティリティ内では、この XML ファイルのセットは git のバージョン管理されていないコンテンツであるため、リポジトリにチェックインすることさえできません。

今のところ、このユーティリティのさまざまなリリース (git によって管理され、リリースにタグが付けられています) を見るたびに、含まれている XML ファイルのセットがどの「バージョン」(より良いのはコミット ハッシュ) を参照しているかを知る方法がありません。 .

だから私は考えていました: それらの XML ファイル内に最新のコミット SHA を (コメントとして) 持つことができれば、ユーティリティの特定のバージョンが参照する XML ファイルのセットを常に知ることができます。このアプローチに何か問題がありますか、それともこれが進むべき道ですか? はいの場合、最新の commit-SHA を XML ファイルに入れるにはどうすればよいですか? ($Id:$ はコミット SHA を使用しないことを読みましたが、「ブロブ」-SHA を使用しますか?)

4

4 に答える 4

5

二択

サブモジュールの使用

メイン アプリをレポ + XML データのサブモジュールとしてビルドできます。git-repo の一部を別のレポのサブモジュールとして使用することはできず、完全なレポ (Git-boys、FIXME) のみを使用することはできないため、utility-repo を「スーパーモジュール」として再作成し、レポを 2 つに分割します - ユーティリティ + XML-データ

メイン リポジトリも「スーパーモジュール」になり、1) メイン アプリと 2) アプリの XML データが含まれます

Git はメイン リポジトリとサブモジュールのチェンジセット間の厳密な関係をすべてのベース チェンジセット ID (Git-boys、FIXME) に対して維持しているため、メイン アプリのハッシュのみを知り、XML データのこのチェンジセット スナップショットに関連付けることができます。

汚れ除去フィルター

リポジトリを完全に独立したものとして維持しながら、追跡データを XML ファイルに追加できます。Git 制御のデータに任意のキーワードを追加する適切な方法は、Smudge-clean フィルターです(「キーワード展開」セクションと $Date$ キーワード展開の例を参照してください)。

于 2012-03-15T21:28:08.597 に答える
2

考えられる解決策は、メイン アプリケーションのビルド プロセスを拡張して、結果の 1 つがパッケージ化された XML ファイルになるようにすることです。このパッケージ化されたバージョンには、メイン アプリケーションのバージョンに関する追加情報が含まれます。このようなパッケージは、外部ユーティリティなどとバンドルすると便利です。

git describeビルド中に、またはのいずれかを使用して git から直接バージョン情報を取得できますgit rev-parse HEAD(「現在の git コミット ID を Java webapp に注入する」を参照) 。

于 2012-03-15T12:59:05.727 に答える
2

その XML ファイルが Git によって追跡されていない場合、これには何の問題もありません。ビルドの基になっているハッシュを目に見える場所に置くのはかなり良い考えだと思います。これにより、何かが発生したときに、これが基になっているソース コードのバージョンを常に確認できます。

完全を期すために、追跡対象のファイル内にハッシュ値を含めることはできません。これは、Git が持つすべての情報に基づいてハッシュが作成されるためです。追跡されたファイルに値を挿入すると、そのファイルが変更され、別のコミットを行うか、以前のコミットを変更する必要があります。これにより、異なるハッシュ値が発生します。

ファイルは追跡されていないため、ファイルを変更してもハッシュ値は変更されないため、上記は問題になりません。現在の SHA1 ハッシュを取得する方法は複数ありますが、最も簡単なのはおそらく.git/refs/heads/master. そのファイルはブランチへのポインタであり、masterそのブランチの HEAD コミットのハッシュが含まれています。もちろん、必要/masterに応じて他のブランチに変更することもできます。

于 2012-03-15T12:36:59.663 に答える
0

皆さん、あなたの入力に基づいて、これが私がしたことです:

  1. XML ファイルにプレースホルダーを挿入します。<!-- @GIT_VERSION@ -->
  2. ant に git のバージョン情報を取得させます。これは Windows であることに注意してください。
  3. XML ファイルをコピーするときに、この情報を XML ファイルに挿入します。

コード:

<target name="getGitDetails">
    <exec executable="cmd" outputproperty="git.revision">
         <arg value="/c" />
         <arg value="git.cmd --git-dir=<path-to-repo> describe --long --dirty --always" />
    </exec>
     <exec executable="cmd" outputproperty="git.currentBranchRef">
         <arg value="/c" />
         <arg value="git.cmd --git-dir=<path-to-repo> describe --all" />
     </exec>
 </target>

 <target name="build" depends="getGitDetails">
     <copy todir="<dest-dir>">  
         <filterset>
             <filter token="GIT_VERSION" value="${git.currentBranchRef} ${git.revision}" />
         </filterset>
     </copy>
 </target>

ご協力いただきありがとうございます!

以下も参照してください。

Ant ビルド スクリプトから最新の git commit ハッシュを検索する方法

`git describe` からアプリケーション ビルド バージョンを取得する - 比較的単純な文字列を取得する方法は?

于 2012-03-16T07:46:14.180 に答える