2016-03-21 10 views
2

私たちのプロジェクトでは、開発のための2ヶ月とUATの1ヶ月を四半期ごとにリリースしています。私たちは非常に大きなプロジェクトであり、それぞれのプロジェクトで約20のチームが別々のモジュールで作業しています。マージ競合支店を押してください

私たちが従うことは、私たちがマスターに取り組んでいることです。そして、2か月後にリリースバージョンを持つリリースブランチを作成します。 RELEASE_VERSION_20.1。リリース後、RELEASEブランチをmasterにマージします。

RELEASE_VERSIONブランチとmasterの間で競合が発生するようになりました。現在、開発者の1人がRELEASE_VERSIONmasterにマージする責任を負っています。そこで、ブランチアウトを作成するかmasterと言うとmerge_RV20.1_into_masterとなります。その後、彼/彼女は、競合を解決しようとしますが、彼らはすべてのモジュールについての知識を持っていない可能性があり、すなわちmasterの変化の一部が上書きされる可能性があるか、リリースブランチからのいくつかの変更が失われる可能性が間違ってマージを行うことに終わる可能性があります。

したがって、マージされたブランチmerge_RV20.1_into_masterを作成する方法があります。すべての競合があり、このブランチをリモートにプッシュすることができるので、各チームの1人の開発者がこのブランチをチェックアウトし、知識のある競合を解決してリモートにプッシュできます。

答えて

2

理論的には、ファイルにマージマーカーを追加してコミットすることができます。

git checkout -b merge_RV20.1_into_master master 
git merge RELEASE_VERSION_20.1 
# add everything, including files with conflict markers in them 
git add . 
git commit -m "merge with conflicts" 

しかし:

  • あなたはもうマージツールでそれらを見ることができないだろう。
  • これらのマージマーカーは、ファイルごとに解決するためにgrepする必要があります。
  • 複雑将来の解像度になるだろうベース(共通の祖先を)、言及していないデフォルトの競合マーカーそれでも、少なくともmerge.conflictstyle設定し、それを行うにしたい場合は

(「Why is a 3-way merge advantageous over a 2-way merge?」を参照してください) diff3。 「Checking Out Conflicts」を参照してください:

def hello 
<<<<<<< ours 
    puts 'hola world' 
||||||| base 
    puts 'hello world' 
======= 
    puts 'hello mundo' 
>>>>>>> theirs 
end 

その方法を、将来の見直しだけではなく上のベースとなります 『我々』と 『彼ら』が、また、 『共通』:あなたは、最後の一般的なバージョンから変更されているどちら側を知っているだろう。

2

したがって、マージされたブランチmerge_RV20.1_into_masterを作成する方法があります。

すべての競合を持っており、各チームから1人の開発者がこのブランチをチェックアウトし、彼らは知識を持っている競合を解決し、リモートにプッシュできるように?私たちは、リモートにこのブランチをプッシュすることができますか

あなたはそれを行うには、プルリクエストを使用する必要がありますすることができます。あなたが戻ってあなたのmasterブランチへのコミットを行う前に、それらの上に行くことができるので、要求はあなたに違いが表示されます引き出します。ここで

は、彼らがプル要求の変更を表示する方法をgithubのからの例です。私の意見については

enter image description here

+0

合意したプルリクエストが最良の方法だと思われますが、私たちが気付いたのは、マージが競合である場合、ギブスは正確な違いを示さないということです。更新されたマスターではなく、いくつかの古いバージョンのマスターとの違いを示すようになります。 : –

0

、何もコミットすることは、リリースブランチ上で直接行われるべきではありません。代わりに、開発者は、ブランチから2つのマージを実行するフィーチャブランチを用意する必要があります.1つはリリースブランチに、もう1つはマージです。これにより、すべての(またはほとんどの)競合が防止されます。

また、リリースブランチからマスターへのマージバックの必要性、およびリリースブランチ上でどのような変更(およびその管理方法)が行われたのかを説明してください。

+0

開発者はリリースブランチに結合するプルリクエストを発行しますが、マスタのプルリクエストを発行するためには使用しません。 リリースブランチのコミットは、通常、UATテストで不具合が発生した場合に使用されます –

+0

他のコードを知らない単一の開発者が行うマージの必要性を減らす - 各開発者は自分のコードをマージする責任がある – yorammi

関連する問題