2017-02-13 4 views
0

gitへのコミットでMySQLデータベーススキーマの更新を調整しようとしています。古いgit 1.7を基本的に作成して、データベーススキーマ更新用の 'git tag --merged'コマンドと同じものを作成します。

私の最初の計画は、コミットにスキーマ番号(たとえば、gitタグschema19936 b6671a2c1)をタグ付けすることでした。次に、タグを現在のブランチ上で利用できるかどうかを確認するために 'git tag -merged'することができました。もしそうなら、schema19936スクリプトを実行してください。

残念ながら、私たちは依然としてgit 1.7を含むCentOS 6をサポートしています。 Git 1.7はgitタグに '--merged'フラグを含んでいないので、私のdoesはもう機能しません。

背景:私たちはSubversionから来ており、以前はコードにスキーマの更新が必要であることを確認する基準としてリビジョン番号を使用していました。

古いgit 1.7では、基本的に 'git tag --merged'コマンドと同じように動作する回避策がありますか?あるいは、これにアプローチするより良い方法があります。

答えて

1

すべて--mergedはテスト祖先ですので、手動で行うことができます。それはC≤をコミット  T 場合、タグTがコミットC "にマージされた"、です。コミットするための「≤」試験は、git merge-base --is-ancestorで実装し、Tを回転さそのコミットTへ コミット容易^{commit}を付加することによりgitrevisions syntaxで行われます。 (コミット以外にタグTポイントは、これは標準エラー出力へのメッセージで、わいわい失敗します。)

残念ながら、git merge-base --is-ancestorはGitの1.8で追加されました。

幸い、the documentationはもっとうまくこの--is-ancestorテストを介して発現されて何をしての「古い方法」を示すシェルスクリプトのリテラルビットを持っています

「早送りネス」をチェックするための共通のイディオム2つのコミットAとBの間にAとBの間のマージベースを計算し、それがAと同じかどうかをチェックします。この場合、AはBの祖先です。古いスクリプトでよく使われるイディオム。

A=$(git rev-parse --verify A) 
if test "$A" = "$(git merge-base A B)" 
then 
    ... A is an ancestor of B ... 
fi 

現代のgitでは、より直接的な方法でこれを言うことができます。代わりに

if git merge-base --is-ancestor A B 
then 
    ... A is an ancestor of B ... 
fi 

を。

単にBのために(テストするためにコミット私たちの)初期A$CためT^{commit}を使用して、古いテストで代用:

A=$(git rev-parse T^{commit}) || exit 1 
if test $A = "$(git merge-base A $C)"; then ...; fi 
+0

おかげで、私はこれはこれは働いていた – vossman77

+0

を試してみるだろう、私がいましたはるかに遅くても 'git tag --merged'を実装することができます。 – vossman77

関連する問題