目次
1
Gitについて
主な開発の流れ
ブランチ運用
2
1. Gitについて
Git
利点
• 複数人で同じプロジェクト (ソースコード の集合) を開発するのに便利
• 開発を master と呼ばれる共有状態と切り離せて行える
• 自分が行った変更を master へ反映しやすい
• 他人の変更を自分の開発環境に簡単に取り込める
欠点
• コマンドや用語が多く, 慣れるまで時間がかかる
活用事例
• 実験環境を保存する (branch)
overwrap アプリケーション
• GitHub, Bitbucket, GitLab, backlog = Git + 𝛼
4
2. 主な開発の流れ
Git – 主な開発の流れ
Gitは、プログラムのソースコードなどの変更履歴を
記録・追跡するための分散型バージョン管理システムである。(Wikiより)
リモートサーバー
ローカルサーバーA ローカルサーバーBrepository
プログラムが
格納された
ディレクトリ
file A
file B
リポジトリ間の通信 (clone, pull, push) では
以下のプロトコルが使用できる。
• ローカルファイルシステム
• SSH
• git(認証機能なし
• HTTP/HTTPS(WebDAV)(pushするためにはWebDAVが必要
• FTP/FTPS: ただし、もはや使うべきではないとされている
以前はrsyncも使用できたが、2.8.0で廃止された (Wikiより)
history
編集履歴
Git – 主な開発の流れ (git clone)
リモートサーバー
ローカルサーバーA ローカルサーバーB
git clone
1. リモートサーバ等にある中心リポジトリをローカルに複製する (git clone)
file A
file B
c0
file A
file B
c0
Git – 主な開発の流れ (git clone)
リモートサーバー
ローカルサーバーA ローカルサーバーB
git clone
1. リモートサーバ等にある中心リポジトリをローカルに複製する (git clone)
file A
file B
c0
file A
file B
c0
file A
file B
c0
Git – 主な開発の流れ (git add, commit)
リモートサーバー
ローカルサーバーA ローカルサーバーB
2. ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更
履歴を記録する (git commit)。 必要に応じて過去の状態の閲覧や復元などを行う。
場合によってはこのステップを何度か繰り返す。
file A の一部を変更
file A
file B
c0
file A
file B
c0
file A
file B
c0
これからの流れ:
サーバーBで行ったファイルの変更を
サーバーAに反映させる
Git – 主な開発の流れ (git add, commit)
リモートサーバー
ローカルサーバーA ローカルサーバーB
2. ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更
履歴を記録する (git commit)。 必要に応じて過去の状態の閲覧や復元などを行う。
場合によってはこのステップを何度か繰り返す。
file A の一部を変更
git add
git commit
→ 編集履歴としてローカルに保存
(図ではc1として表す, c1はfile Aの
どの行をどう変更したという記録)
file A
file B
c0
file A
file B
c0
file A
file B
c1
c0
Git – 主な開発の流れ (git push)
リモートサーバー
ローカルサーバーA ローカルサーバーB
3. ローカルの変更内容を中心リポジトリに反映させる (git push)。作業者ごとの
変更内容が衝突することもある。Gitが自動で解決できる場合もあれば、手動での
解決 (git merge)が必要なこともある。
file A
file B
c0
file A
file B
c1
c0
file A
file B
c1
c0
git push
Git – 主な開発の流れ (git pull)
リモートサーバー
ローカルサーバーA ローカルサーバーB
4. 更新された中心リポジトリ(他者の作業内容も統合されている)をローカルの
複製にも反映する (git pull)。これによりローカル環境のコードも最新の内容にな
るので、改めてステップ2の作業を行う。
file A
file B
c1
c0
file A
file B
c1
c0
file A
file B
c1
c0 git pull
まとめ:
リモートサーバーを介して,
ローカルサーバー同士の同期 / 編集履歴
の共有が行える
Git – repository作成
1. GitHubを使用する場合 → サイトから作成
リモートサーバーはGitHubサーバー
2. 自前サーバーで用意
https://git-scm.com/book/ja/v2/Gitサーバー-サーバー用の-Git-の取得
(公式例)
上記URLに従って /opt/git/xxx.git を作成
すると
git clone /opt/git/xxx.git
でcloneできるようになります
リモートサーバー
xxx:/opt/git/
ローカルサーバー
xxx:/home/user
13
3. ブランチ運用
Git – ブランチ運用例
masterブランチ
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
c0
file A
file B
c0
file A
file B
c0
とりあえずpull
しました
まかせて
A B
ローカルサーバーZ
file A
file B
c0
私が
リーダー
です
Z
master
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
c0
file A
file B
c0
file A
file B
c0
オレもだぜ!
A B
ローカルサーバーZ
file A
file B
c0
Z
ブランチを
作るぜ!
master
featureA
featureB
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
ca2
ca1
c0
file A
file B
cb2
cb1
c0
file A
file B
c0
featureBブランチで
開発中
A B
ローカルサーバーZ
file A
file B
c0
Z
master
featureAブランチで
開発中
featureA
featureB
masterブランチで
今まで通り
計算できる
ca1 ca2
cb2cb1
masterブランチ
Git – ブランチ運用例
リモートサーバー
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
ca2
ca1
c0
file A
file B
file A
file B
c0
まだです
A B
ローカルサーバーZ
file A
file B
cz1
c0
Z
できた
master
featureA
featureB
ca1 ca2
cb2cb1
cb3
cb2
cb1
cb3
バグがあったから
解消しといたよ
cz1
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
file A
file B
cz1
c0
まだです
A B
ローカルサーバーZ
file A
file B
cz1
c0
Z
masterの変更を
取り込むよ
master
featureA
featureB
ca1 ca2
cb2cb1
cb3
cb2
cb1
cb3
cz1
merge
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
まだやってます
A B
ローカルサーバーZ
file A
file B
cz1
c0
Z
fearueAで
動作確認して
okでした
master
featureA
featureB
ca1 ca2
cb2cb1
cb3
cb2
cb1
cb3
cz1
merge
file A
file B
cz1
c0
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
まだやってます
A B
ローカルサーバーZ
file A
file B
cz1
c0
Z
終わったんで
帰ります
master
featureA
featureB
ca1 ca2
cb2cb1
cb3
cb2
cb1
cb3
cz1
merge
Aくん
お疲れ
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
終わりました
masterを
マージしてみます
B
ローカルサーバーZ
file A
file B
cz1
c0
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb4
cb3
cb2
cb3
cz1
cb4
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
fileBで
衝突しました
B
ローカルサーバーZ
file A
file B
cz1
c0
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb4
cb3
cb2
cb3
cz1
cb4
merge
解決しといて
衝突; ZとBで同じ箇所を別々に変更
していた場合生じる
• どちらかの変更のみを反映させる
• 両方の変更を反映させる
などの処理を行う.
<<<<<<< HEAD
# 作業ブランチでの変更内容
・・・
=======
# マージしたブランチでの変更内容
・・・
>>>>>>> develop
の記号で, 衝突箇所を教えてくれる
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
衝突を
解決しました
B
ローカルサーバーZ
file A
file B
cz1
c0
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb5
cb4
cb3
cb3
cz1
cb4
merge
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
featureBブランチでの
テスト実行で
失敗しました
B
ローカルサーバーZ
file A
file B
cz1
c0
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb5
cb4
cb3
cb3
cz1
cb4
merge
私が手伝おう
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
お願いします
B
ローカルサーバーZ
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb5
cb4
cb3
cb3
cz1
cb4
merge
featureBに
checkoutしたよ
file A
file B
cb5
cb4
cb3
file A
file B
cz1
ca2
ca1
masterブランチ
checkout
他のブランチの状態に
切り替えること
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
さすがです
B
ローカルサーバーZ
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb5
cb4
cb3
cb3
cz1
cb4
解決しました
file A
file B
cb5
cb4
cb3
file A
file B
cz1
ca2
ca1
masterブランチ
Git – ブランチ運用例
ローカルサーバーA ローカルサーバーB
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
file A
file B
cz1
ca2
ca1
file A
file B
B
ローカルサーバーZ
Z
master
featureA
featureB
ca1 ca2
cb2cb1
cb5
cb4
cb3
cb3
cz1
cb4
おつのかれ
file A
file B
cb5
cb4
cb3
merge
マージしました
file A
file B
cb5
cb4
cb3
cz1
masterブランチ
Git – ブランチ運用例
状況: 機能Aと機能Bを開発したい
→ リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた
Z
master
featureA
featureB
ca1 ca2
cb2cb1 cb3
cz1
cb4
• masterは常に安定して動作する状況にするのが大切です
• そのために, masterにmergeする前に自分の開発ブランチにmasterをマージして
その状態でサンプルデータなどで実行テストを行い, OKだったらmasterにマージすると安全です
• pythonの場合は, 実行テストに
pytestなどの単体テストモジュールなどを活用すると良いと思います
• より実践的なブランチ運用については, Git Flow などが参考になります
merge
file A
file B
masterブランチ
cb5
cb4
cb3
cz1

Git/GitHub

  • 1.
  • 2.
  • 3.
    Git 利点 • 複数人で同じプロジェクト (ソースコードの集合) を開発するのに便利 • 開発を master と呼ばれる共有状態と切り離せて行える • 自分が行った変更を master へ反映しやすい • 他人の変更を自分の開発環境に簡単に取り込める 欠点 • コマンドや用語が多く, 慣れるまで時間がかかる 活用事例 • 実験環境を保存する (branch) overwrap アプリケーション • GitHub, Bitbucket, GitLab, backlog = Git + 𝛼
  • 4.
  • 5.
    Git – 主な開発の流れ Gitは、プログラムのソースコードなどの変更履歴を 記録・追跡するための分散型バージョン管理システムである。(Wikiより) リモートサーバー ローカルサーバーAローカルサーバーBrepository プログラムが 格納された ディレクトリ file A file B リポジトリ間の通信 (clone, pull, push) では 以下のプロトコルが使用できる。 • ローカルファイルシステム • SSH • git(認証機能なし • HTTP/HTTPS(WebDAV)(pushするためにはWebDAVが必要 • FTP/FTPS: ただし、もはや使うべきではないとされている 以前はrsyncも使用できたが、2.8.0で廃止された (Wikiより) history 編集履歴
  • 6.
    Git – 主な開発の流れ(git clone) リモートサーバー ローカルサーバーA ローカルサーバーB git clone 1. リモートサーバ等にある中心リポジトリをローカルに複製する (git clone) file A file B c0 file A file B c0
  • 7.
    Git – 主な開発の流れ(git clone) リモートサーバー ローカルサーバーA ローカルサーバーB git clone 1. リモートサーバ等にある中心リポジトリをローカルに複製する (git clone) file A file B c0 file A file B c0 file A file B c0
  • 8.
    Git – 主な開発の流れ(git add, commit) リモートサーバー ローカルサーバーA ローカルサーバーB 2. ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更 履歴を記録する (git commit)。 必要に応じて過去の状態の閲覧や復元などを行う。 場合によってはこのステップを何度か繰り返す。 file A の一部を変更 file A file B c0 file A file B c0 file A file B c0 これからの流れ: サーバーBで行ったファイルの変更を サーバーAに反映させる
  • 9.
    Git – 主な開発の流れ(git add, commit) リモートサーバー ローカルサーバーA ローカルサーバーB 2. ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更 履歴を記録する (git commit)。 必要に応じて過去の状態の閲覧や復元などを行う。 場合によってはこのステップを何度か繰り返す。 file A の一部を変更 git add git commit → 編集履歴としてローカルに保存 (図ではc1として表す, c1はfile Aの どの行をどう変更したという記録) file A file B c0 file A file B c0 file A file B c1 c0
  • 10.
    Git – 主な開発の流れ(git push) リモートサーバー ローカルサーバーA ローカルサーバーB 3. ローカルの変更内容を中心リポジトリに反映させる (git push)。作業者ごとの 変更内容が衝突することもある。Gitが自動で解決できる場合もあれば、手動での 解決 (git merge)が必要なこともある。 file A file B c0 file A file B c1 c0 file A file B c1 c0 git push
  • 11.
    Git – 主な開発の流れ(git pull) リモートサーバー ローカルサーバーA ローカルサーバーB 4. 更新された中心リポジトリ(他者の作業内容も統合されている)をローカルの 複製にも反映する (git pull)。これによりローカル環境のコードも最新の内容にな るので、改めてステップ2の作業を行う。 file A file B c1 c0 file A file B c1 c0 file A file B c1 c0 git pull まとめ: リモートサーバーを介して, ローカルサーバー同士の同期 / 編集履歴 の共有が行える
  • 12.
    Git – repository作成 1.GitHubを使用する場合 → サイトから作成 リモートサーバーはGitHubサーバー 2. 自前サーバーで用意 https://git-scm.com/book/ja/v2/Gitサーバー-サーバー用の-Git-の取得 (公式例) 上記URLに従って /opt/git/xxx.git を作成 すると git clone /opt/git/xxx.git でcloneできるようになります リモートサーバー xxx:/opt/git/ ローカルサーバー xxx:/home/user
  • 13.
  • 14.
    Git – ブランチ運用例 masterブランチ ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B c0 file A file B c0 file A file B c0 とりあえずpull しました まかせて A B ローカルサーバーZ file A file B c0 私が リーダー です Z master
  • 15.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B c0 file A file B c0 file A file B c0 オレもだぜ! A B ローカルサーバーZ file A file B c0 Z ブランチを 作るぜ! master featureA featureB masterブランチ
  • 16.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B ca2 ca1 c0 file A file B cb2 cb1 c0 file A file B c0 featureBブランチで 開発中 A B ローカルサーバーZ file A file B c0 Z master featureAブランチで 開発中 featureA featureB masterブランチで 今まで通り 計算できる ca1 ca2 cb2cb1 masterブランチ
  • 17.
    Git – ブランチ運用例 リモートサーバー ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B ca2 ca1 c0 file A file B file A file B c0 まだです A B ローカルサーバーZ file A file B cz1 c0 Z できた master featureA featureB ca1 ca2 cb2cb1 cb3 cb2 cb1 cb3 バグがあったから 解消しといたよ cz1
  • 18.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B file A file B cz1 c0 まだです A B ローカルサーバーZ file A file B cz1 c0 Z masterの変更を 取り込むよ master featureA featureB ca1 ca2 cb2cb1 cb3 cb2 cb1 cb3 cz1 merge masterブランチ
  • 19.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B まだやってます A B ローカルサーバーZ file A file B cz1 c0 Z fearueAで 動作確認して okでした master featureA featureB ca1 ca2 cb2cb1 cb3 cb2 cb1 cb3 cz1 merge file A file B cz1 c0 masterブランチ
  • 20.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B まだやってます A B ローカルサーバーZ file A file B cz1 c0 Z 終わったんで 帰ります master featureA featureB ca1 ca2 cb2cb1 cb3 cb2 cb1 cb3 cz1 merge Aくん お疲れ file A file B cz1 ca2 ca1 masterブランチ
  • 21.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B 終わりました masterを マージしてみます B ローカルサーバーZ file A file B cz1 c0 Z master featureA featureB ca1 ca2 cb2cb1 cb4 cb3 cb2 cb3 cz1 cb4 file A file B cz1 ca2 ca1 masterブランチ
  • 22.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B fileBで 衝突しました B ローカルサーバーZ file A file B cz1 c0 Z master featureA featureB ca1 ca2 cb2cb1 cb4 cb3 cb2 cb3 cz1 cb4 merge 解決しといて 衝突; ZとBで同じ箇所を別々に変更 していた場合生じる • どちらかの変更のみを反映させる • 両方の変更を反映させる などの処理を行う. <<<<<<< HEAD # 作業ブランチでの変更内容 ・・・ ======= # マージしたブランチでの変更内容 ・・・ >>>>>>> develop の記号で, 衝突箇所を教えてくれる file A file B cz1 ca2 ca1 masterブランチ
  • 23.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B 衝突を 解決しました B ローカルサーバーZ file A file B cz1 c0 Z master featureA featureB ca1 ca2 cb2cb1 cb5 cb4 cb3 cb3 cz1 cb4 merge file A file B cz1 ca2 ca1 masterブランチ
  • 24.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B featureBブランチでの テスト実行で 失敗しました B ローカルサーバーZ file A file B cz1 c0 Z master featureA featureB ca1 ca2 cb2cb1 cb5 cb4 cb3 cb3 cz1 cb4 merge 私が手伝おう file A file B cz1 ca2 ca1 masterブランチ
  • 25.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B お願いします B ローカルサーバーZ Z master featureA featureB ca1 ca2 cb2cb1 cb5 cb4 cb3 cb3 cz1 cb4 merge featureBに checkoutしたよ file A file B cb5 cb4 cb3 file A file B cz1 ca2 ca1 masterブランチ checkout 他のブランチの状態に 切り替えること
  • 26.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B さすがです B ローカルサーバーZ Z master featureA featureB ca1 ca2 cb2cb1 cb5 cb4 cb3 cb3 cz1 cb4 解決しました file A file B cb5 cb4 cb3 file A file B cz1 ca2 ca1 masterブランチ
  • 27.
    Git – ブランチ運用例 ローカルサーバーAローカルサーバーB 状況: 機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた file A file B cz1 ca2 ca1 file A file B B ローカルサーバーZ Z master featureA featureB ca1 ca2 cb2cb1 cb5 cb4 cb3 cb3 cz1 cb4 おつのかれ file A file B cb5 cb4 cb3 merge マージしました file A file B cb5 cb4 cb3 cz1 masterブランチ
  • 28.
    Git – ブランチ運用例 状況:機能Aと機能Bを開発したい → リーダーZ がサーバーA, Bを管理するA, Bさんにそれぞれ開発を任せた Z master featureA featureB ca1 ca2 cb2cb1 cb3 cz1 cb4 • masterは常に安定して動作する状況にするのが大切です • そのために, masterにmergeする前に自分の開発ブランチにmasterをマージして その状態でサンプルデータなどで実行テストを行い, OKだったらmasterにマージすると安全です • pythonの場合は, 実行テストに pytestなどの単体テストモジュールなどを活用すると良いと思います • より実践的なブランチ運用については, Git Flow などが参考になります merge file A file B masterブランチ cb5 cb4 cb3 cz1