web-dev-qa-db-ja.com

gitに増加したビルド番号を自動的にマージさせる方法は?

かっこいいからといって、ビルド番号を付けるのが好きです。私を判断しないでください:D。

ただし、私は2台のマシン(移植性チェック用に1台のOS Xと1台のWindows)で開発しています。両方のマシンに、プロジェクトをビルドするたびにビルド番号を自動的に増やすスクリプトがあります。ただし、gitと同期せずに両方のマシンで変更を行うと、ビルド番号を保持するファイルが両方のマシンで変更されたため、明らかにマージの競合が発生します。

これらのファイルを自動的にマージするためのきちんとした方法はありますか?次のようなルールを定義できれば、すばらしいと思います。

ファイルbuildnumber.txtにマージの競合がある場合は、スクリプトauto-merge-build-number.shを実行して、コミットを続行します。

ここで、auto-merge-build-number.shは、競合するファイルを解析し、2つの数値(競合する行にあります)を合計し、その合計でファイルを書き換える単純なスクリプトです。これがgitで可能かどうかはわかりません。

私が自分自身について考えることができる別の方法がありますが、あまりきちんとしていません。そのマシンにのみ使用されるすべてのマシンのビルドカウンターファイルを追跡します。プロジェクトがそのマシンでビルドされる場合、そのマシンのビルドカウンターファイルが増加します。その後、ビルド番号を保持しているすべてのファイルが合計され、結果が.gitignoreにあるファイルに書き込まれます。このように、複数のマシンで開発することによるマージの競合はありません。複数のブランチで開発することによってのみ競合をマージします。合計ビルド数を追跡するためにn + 1ファイルが必要であり(n台のマシンがある場合)、適切なファイルを増やすためにすべてのマシンのスクリプトをわずかに異なる必要があるため、このアプローチはあまり好きではありません。

これをどのように行うことができるかについて何か考えはありますか?

1

まず、ビルドの代わりにコミットを使用することで逃げることができますか?

git describeまたはgit rev-list --count --first-parent HEADはリビジョン番号のようなものを与えることができます。ブランチがある場合は注意してください。間違った動作をしますが、ビルド番号も同様です。

次に、ビルド番号の使用を主張する場合は、カスタムマージドライバーが必要です。

こちらのドキュメントを参照してください: http://git-scm.com/docs/gitattributes#_defining_a_custom_merge_driver

基本的に、マージ中にやりたいことを実行するスクリプトを作成できるはずです。

3
Winston Ewert

さまざまな語彙でさらに検索した後、私はこの投稿を見つけました: http://nuclearsquid.com/writings/git-tricks-tips-workflows/ (.gitattributesに関するセクション)

基本的に、このソリューションは私が探していたソリューションであり、2つのステップで構成されています。

  • 選択したスクリプト言語を使用してマージ戦略(たとえば、buildnumbermergeと呼ばれる)を作成し、それを.git/configに配置します(詳細については、リンクを参照してください)。
  • どのファイルがどのマージ戦略を使用するかを指定します。つまり、buildnumber.txtには、次のような行を使用して.gitattributesで指定することにより、マージ戦略buildnumbermergeが必要です。

    buildnumber.txt merge=buildnumbermerge
    

参照:

1