2022/06/29

共同開発について

一つのリポジトリを共同開発者がcloneして共同開発を行うケース[case1]について
おおもとのリポジトリを共同開発者がforkして各リポジトリで開発を行うケース[case2]もあるが、今回は[case1]についてのみ
ここで言うcloneのみでの共同開発は、一つのリポジトリを各共同開発者がクローンすることで、
自由にプッシュ、マージなどができる方法である
image

[case1]の選択基準

  • 簡単な開発

  • 知り合い同士での開発

  • 少人数での共同開発

  • Gitの取り扱いに不慣れな人がいる

[case1]の流れ

  1. 共同開発用リポジトリの作成

  2. 共同開発用リポジトリへのコラボレーターの追加

  3. 各開発者がリポジトリをクローン

  4. 各開発者がクローンしたリポジトリでブランチを切って開発

⚠️開発は連携を密にとる必要がある
話し合いで共同開発者が順番に作業を行えたらめんどくさいことは起こらないので。
image

[case1]でのgit操作の例

リポジトリのクローンからブランチを切って開発しプッシュするまでのコマンドライン上での操作例

$ git clone https://github.com/GITHUB_USERNAME/REPOSITORY_NAME.git

# developブランチで開発をする場合
$ git checkout -b develop

# at develop
$ git add FILENAME
$ git commit -m "COMMIT MESSAGE"
$ git push origin develop
$ git checkout main

# at main
$ git merge develop
$ git push
or github上でプルリクエストの作成->merge

ブラウザ上のgithub UIでプルリクエストを作成してマージする方法

変更したリポジトリ上でpull requests > New pull request > マージするリポジトリ(ブランチ), マージされるリポジトリ(ブランチ)を選択 > create pull request
Merge pull requestでマージ
image

コンフリクトが発生すると、↓のような画面が出る
image

Resolve conflictsを押すと、コンフリクト解消のための画面が表示される
> : マージ先のリポジトリ(ブランチ)
< : マージ元のリポジトリ(ブランチ)
image

差分を確認しながら編集して、編集が完了したらmark as resolvedを押す
image
後は通常通りマージするだけ

複数の開発者が順番に作業を行う場合

順番に開発作業を行えればコンフリクトも発生せずうまくいく
image

複数の開発者が並行して作業をしている場合

順番に開発作業を行うことは現実的に難しい
開発者が並行して作業する場合、いかに話し合いをうまく進めてもリポジトリ上での問題発生は避けられない
コンフリクトが発生すると無駄な工程が増えてしまうので起こらない工夫が大切
image

直前にリベースをすることによってコンフリクトを事前に避ける
rebaseの部分だけどんなコマンドを使うか例を挙げる

$ git checkout topic1
$ git pull --rebase origin develop

image

まとめ

githubで行う共同開発のうち、一つのリポジトリを共同開発者がcloneして共同開発を行うケースについて調べた
[case2]についてはまた今度まとめる

参考