質問: ### 前提・実現したいこと お世話になります。 複数人でのブランチマージにおける運用についてご意見を聞かせてください。 以下2つのブランチが存在したとします。 ・dev1 ・dev2 ※masterから派生し、製品が違うようなブランチです。 dev1,dev2は同時に開発が進み、途中で共通機能/不具合の反映のため、 dev1→dev2にマージを行うとします。 代表者がgit mergeを行いますが、担当ではないファイルのコンフリクトが発生します。 ブランチのマージ対応で自分以外のファイルがコンフリクトを起こした場合、 皆様どのように運用しているのでしょうか? ### 考えられるケース(1) マージ対応中の作業ツリーに各担当者に入ってもらい、コンフリクトファイルを解消してもらう。 ### 考えられるケース(2) コンフリクトリストを展開して解消版のファイルを代表者宛に送ってもらう。 マージ代表者は、そのファイルを元に、マージを完了させる。 ### 本当はこうしたいが出来るのかな? 上記ケースは、接続環境や人数規模の関係で適用が難しいです。 そもそも、コンフリクト解消は、各自の作業ツリーで対応したいです。 例えば、以下のようなことはGit単体で可能なのでしょうか? [1]マージ代表者は、マージ用の仮ブランチを作成して、git mergeを行う。 [2]マージ代表者は、自動マージ出来たファイルを先行してcommit, pushする。 [3]各担当者は、コンフリクト解消依頼を受け、自分の作業ツリーで未解消分の対応を行いcommit,pushする。 試した内容は次の通りです。 [1][2]の操作として、 git checkout dev2 git checkout -b dev2_merge git merge dev1 git reset <コンフリクトファイル> ← コンフリクトファイルがあるとコミット出来ないため git commit -m "merge1" git push -u origin dev2_merge 次が[3]の操作として、 git checkout dev2_merge git merge dev1 → 「Already up to date.」を表示され、マージは出来ない。 期待としてコンフリクト未解消ファイルが表示され、担当ファイルだけ解消/commit/push出来ると良かった。
回答: こんにちは。 同じソースを複数の人が修正するということと思います。 それがコンフリクトした場合、その修正理由をマージ担当者が把握していればマージ担当者によるコンフリクト解消も可能と思いますが、自分が担当していない修正全てについて把握するのは、現実問題不可能ではないでしょうか? ソース修正を担当した人同士が話し合って、コンフリクトを解消するのが最も効率的と思います。 となると、下記は本当に妥当なのでしょうか? > > 以下2つのブランチが存在したとします。 > > ・dev1 > > ・dev2 > > ※masterから派生し、製品が違うようなブランチです。 > > > 同じソースをメンテナンスする人たちは、お互いに密に連携して当該ソースをメンテナンスする必要があります。同じブランチなら、頻繁にプッシュ→プルしたり、お互いにプルリクするしたりなど、問題を軽減する仕組みを構築することが可能と思います。しかし、別ブランチにした場合、相手のブランチに対してプルリクを出すとか、頻繁にプッシュ→プルするなどは、ちょっと厳しいだろうと感じます。つまり、共通のソースを別のブランチで管理するのはあまりよろしくない使い方ではないかと思います。 私が見たことのある巨大なオープンソースプロジェクトは、llvmやboost、Qtなどがあります。全て、複数のプラットフォームに対応していますが、プラットフォーム毎にブランチが別れたりせず、1つのマスター・ブランチで全てのプラットフォームに対応しています。