2016-09-15 16 views
1

ブランチmaster(プロダクションサーバー上)のブランチより先にブランチorigin/master(テストサーバーから)があります。私はorigin/masterからmasterへコミットを1つ1つずつ適用して、各ステップでアプリケーションがこれらのコミットにどのように反応するかを観察したいと思います。gitを使用してテストサーバーから実動サーバーへの継続的なデプロイ

git cherry-pickを使用しましたが、コミットチェックサムが変更されています。私は同じ歴史を残したいと思います。

origin/masterからコミットのリストを見ることができ、git merge <commit>を1つずつ手動で実行することもできますが、私は正しいコミットを手動で選択しますが、「最初のコミットを適用する2つの枝 "。

+0

あなたはチェリーピック、リセット、マージすることができますが、ちょっと面倒です。おそらくこのプロセスはいくつかのシェルスクリプトを使用して自動化できます – Dunno

答えて

0

チェックサムは、コミッター、コミット日付、作成者、コミットメッセージ、ツリーオブジェクトのハッシュなどの情報を使用して計算されたハッシュです。コミットが変更されたときはいつでもユニークになり、その周りには(またはあなたが望むものであっても)わからない。

-xパラメータを探しているようですが、チェリーピック時に元のコミットハッシュを自動的にコミットメッセージに追加します。

ここで私はちょうど作られた例です:

git cherry-pick -x 60aa086c5d8d68fdeb47d02d9e06a6420e721295 

と歴史

git log 
    commit 6287d63090736c9a1ae58d578d2d395896561f27 
    Author: Kief Kraken <[email protected]> 
    Date: Tue Sep 13 16:31:36 2016 -0700 

     original commit message 
     (cherry picked from commit 60aa086c5d8d68fdeb47d02d9e06a6420e721295) 

あなたはあなたが必要ならば、元のコミットを見つけることができるので、あなたは常に元コミットハッシュを持ってこのように。

+0

'git merge 'を使って、手動で正しいコミットを選択するとそのトリックを行います。しかし、私は自動的に2つの支店間で異なる最初のコミットを選択したいと思います。 –

1

この(テストされていない)bashスクリプトはどうでしょうか?

# CREATES A master_test BRANCH STARTING ON master 
git checkout -b master_test master 

# FOR ALL DIFFERENT COMMITS 
for h in $(git log --pretty=format:%H master..origin/master) 
do 
    # MERGE THE COMMIT 
    git merge $h 

    # PAUSE TO "OBSERVE" 
    echo "Paused" 
    read pause 
done 
+0

良いアイデアですが、forループは、bashのあいまいな動作のために1回の繰り返しですべてのコミットを受け取ります。おそらく、git logコマンドから来る改行の処理に関係しています。 –

+0

IFS変数の値を確認します(echo X $ {IFS} X)。あなたはIFS変数のデフォルト以外の値があると思います。デフォルト値は空白(スペース、タブ、および改行)ですが、コンマ区切りのデータファイルを解析する場合などに変更することができます(詳細は、このドキュメントの「IFS」を検索してください)。http:// tldp。 org/LDP/abs/html/internalvariables.html)。 –

+0

'IFS = $ '\ t \ n''を使っても問題は解決しません。GNU bashバージョン3.2.57(1)-release(x86_64-apple-darwin15)' –

1

これにはbisectを使用できます。これは、既知の良いコミットと悪いコミットの間のコミットをピッキングするプロセス(バイナリ検索を使用)を自動化し、探している動作を引き起こした元のコミットを見つけます。

+0

を使っています。 2つのブランチ間で異なる最初のコミットから順番に各コミットを適用したいと考えています。これを行うために 'bisect'を使う方法は? –

+0

@OrtomalaLokni一度に1つずつ適用するのではなく、2つのコミットの間でバイナリ検索を行って問題を見つけます。問題のあるコミットを探している場合、バイナリ検索は一度に1つずつコミットするよりも速くなければなりません。それぞれのコミット後にコードが何をするかを見たい場合、bisectはあなたを助けません。 – Andy

+0

テストサーバーから運用サーバーへの継続的な展開用です。だから興味深いツールでも、 'git bisect'は解決策ではありません。 –

関連する問題