質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

1回答

5810閲覧

Git 複数人でブランチマージを対応したい。

youk

総合スコア10

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

2クリップ

投稿2018/12/21 07:59

前提・実現したいこと

お世話になります。
複数人でのブランチマージにおける運用についてご意見を聞かせてください。

以下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出来ると良かった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんにちは。

同じソースを複数の人が修正するということと思います。
それがコンフリクトした場合、その修正理由をマージ担当者が把握していればマージ担当者によるコンフリクト解消も可能と思いますが、自分が担当していない修正全てについて把握するのは、現実問題不可能ではないでしょうか?
ソース修正を担当した人同士が話し合って、コンフリクトを解消するのが最も効率的と思います。

となると、下記は本当に妥当なのでしょうか?

以下2つのブランチが存在したとします。

・dev1
・dev2
※masterから派生し、製品が違うようなブランチです。

同じソースをメンテナンスする人たちは、お互いに密に連携して当該ソースをメンテナンスする必要があります。同じブランチなら、頻繁にプッシュ→プルしたり、お互いにプルリクするしたりなど、問題を軽減する仕組みを構築することが可能と思います。しかし、別ブランチにした場合、相手のブランチに対してプルリクを出すとか、頻繁にプッシュ→プルするなどは、ちょっと厳しいだろうと感じます。つまり、共通のソースを別のブランチで管理するのはあまりよろしくない使い方ではないかと思います。

私が見たことのある巨大なオープンソースプロジェクトは、llvmやboost、Qtなどがあります。全て、複数のプラットフォームに対応していますが、プラットフォーム毎にブランチが別れたりせず、1つのマスター・ブランチで全てのプラットフォームに対応しています。

投稿2018/12/21 08:54

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

youk

2018/12/25 02:30

ご回答ありがとうございます。 前提の構成に突っ込みどころがあるのはわかりますが、 実際には、ブランチ毎に品質を担保したい等で分けるケースもあるかと思います。 Gitで多人数によるブランチマージを進める手順としては、 ケース(1)(2)しか方法が無いのでしょうか。
Chironian

2018/12/25 06:12 編集

> 実際には、ブランチ毎に品質を担保したい等で分けるケースもあるかと思います。 なるほど。 ならば、マージが発生しうる共通部分をサブモジュール化して管理すると、コンフリクト解消はサブモジュールへのコミット時に担当者にて記憶の新しい内にこまめに行なえますし、その結果の各製品への反映タイミングは製品側で決定できますので品質の担保も行いやすいと思います。 https://qiita.com/sotarok/items/0d525e568a6088f6f6bb ところで、Gitはフローをうまく設計しておかないと、使いにくくなります。GitHub Flow、GitLab Flow、Git Flowが有名です。(後ろに行くほどより大規模なプロジェクトをより高信頼性で管理することを目指したフローです。)これらを参考にされた方が管理しやすくなるだろうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問