SlideShare a Scribd company logo
1 of 41
Download to read offline
SVNからGitへ
乗り換えてほしい話
2021/2/4
takeyamami
まず、はじめに
この資料は非エンジニアにGitに
移行したい気持ちを伝えるための資料です
厳密には、正確には、というところは
割愛・省略しますのでご了承ください
早速ですが、
みなさん、バージョン管理ツール使ってますか?
CVS?SVN?Git?
それとも、男は黙って共有サーバ管理?
VSSも使ってたんですよ~
ちょっと化石みたいなものは置いておいて
SVNとGit何が違うの?
というのを簡単に説明したうえで
実際の業務の例を織り交ぜて
Gitにしてほしいことをアピールします
そもそも、バージョン管理ツールってなに?
 誰が、いつ、何をどのように修正したかといった履歴情報とコードを
一緒に管理するツール
 SVNやGitなどが有名
 今やこれなしに複数人での開発は考えられない
バージョン管理ツールがないとき
修正中
 同時に複数人が同じファイルを修正できない
 他の人の修正内容がわからず、誤って消してしまうかもしれない
 修正内容を元に戻したり、消したファイルを復元することができない
(難しい、大変!!)
バージョン管理ツールがないとき
バージョン管理ツールがあるとき
チェックアウト
チェックアウト
バージョン管理ツールがあるとき
修正中
修正中
バージョン管理ツールがあるとき
コミット
修正中
 同時に複数人が修正できる
 他の人の修正内容がすぐわかる(誰が、いつ、何をしたかまで!)
 修正内容を元に戻したり、消したファイルを元に戻すことが簡単
バージョン管理ツールがあるとき
じゃあ、バージョン管理ツールって
どうやって履歴情報を管理しているの?
SVNとGitの違い
※イメージつきやすいように細かいところは省いてます
SNVはコミットやマージ、更新するたびに、
前のリビジョンの状態に対して、差分を計算して
最新のファイル状態を管理している
Gitはコミットするときに、修正したファイルの
スナップショットを保持
じゃあ、いっぱいコミットしたPJのコードを
別のブランチにマージしようって
なったらどうなるか
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミット0
Rev.300
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
コミット1~5をマージしてコミットしたい!!
コミット0
Rev.300
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
コミット1の修正内容が競合し、マージできず!
conflict
コミット0
Rev.300
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
競合を解消する
OK
コミット0
Rev.300
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
再度マージをする
OK
コミット0
Rev.300
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
コミット2の修正内容が競合し、マージできず!
OK conflict
コミット0
Rev.300
お察しの通り
このあと、幾度となくコミットごとの
競合を解消していった
SVNの場合(本当にあった怖い話)
ブランチB
ブランチA
コミット1
Rev.301
コミット2
Rev.303
コミット3
Rev.305
コミット4
Rev.307
コミット5
Rev.308
コミットa
Rev.302
コミットb
Rev.304
コミットc
Rev.306
コミットd
Rev.309
すべての競合を解消し、マージ完了後
ああ、やっと、コミット
OK OK OK OK OK
コミット0
Rev.300
差分しか持っていないSVNでは、
複数のリビジョンを選択してマージする場合でも
一つずつ計算してそのコミット時点の
ファイルの状態を作成し、
マージできるかどうかチェックする
そのため、一つでも競合が発生すると、
以降のリビジョンのマージはされず
マージ⇒チェック⇒競合発生⇒競合の解消
⇒残りをマージ⇒チェック⇒競合発生⇒・・・
といったことが起きてしまう
じゃあ、これがGitだったら、どうなっていたか
Gitの場合(仮定の話)
ブランチB
ブランチA
コミット1
親:0
コミット2
親:1
コミット3
親:2
コミット4
親:3
コミット5
親:4
コミットa
親:0
コミットb
親:a
コミットc
親:b
コミット0
親:#
コミットd
親:5とb
ブランチBをマージしてコミットしたい!!(プルリク)
Gitの場合(仮定の話)
ブランチB
ブランチA
コミット1
親:0
コミット2
親:1
コミット3
親:2
コミット4
親:3
コミット5
親:4
コミットa
親:0
コミットb
親:a
コミットc
親:b
コミット0
親:#
コミットd
親:5とb
コミット5の修正内容で競合が発生
※コミット1~4の修正内容も堆積したものが競合している
conflict
Gitの場合(仮定の話)
ブランチB
ブランチA
コミット1
親:0
コミット2
親:1
コミット3
親:2
コミット4
親:3
コミット5
親:4
コミットa
親:0
コミットb
親:a
コミットc
親:b
コミット0
親:#
コミットd
親:5とb
競合を解消し、コミット
OK
Gitでは、コミットした時点の情報だけでなく、
親コミットの修正内容込み込みで
変更履歴を保持している
マージできるかチェックの際に
確認するファイルの状態は
それまでの変更内容がすべて含まっている
そのため、マージ作業は1回で済む!!!
競合はもちろん、Gitでも起きてしまう
でも、もう一度言う
マージ作業は1回で済む!!!
これによって、みんな(主にエンジニア)が
ものすごくハッピーになる
この例は競合が5回のパタンだったけど、
もし、競合が10、20回だったら、、、
マージしているときに本当に集中したいのは、
競合の解消作業であって、
SVNが必死に時間をかけてチェックしたり、
何度も何度も競合と向き合わないといけない
時間は無駄でしかない
さあ、Gitへ

More Related Content

What's hot

GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方Takeshi Mikami
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフローadd20
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)Go Maeda
 
Research modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化するResearch modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化するSoichiro Sugimoto
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げるWataru Terada
 
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -Takao Oyobe
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
(自分流)Gitの運用ルール
(自分流)Gitの運用ルール(自分流)Gitの運用ルール
(自分流)Gitの運用ルールErina Takei
 
バージョン管理システム比較資料
バージョン管理システム比較資料バージョン管理システム比較資料
バージョン管理システム比較資料suzzsegv
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集akipii Oga
 
はじめてのScrum
はじめてのScrumはじめてのScrum
はじめてのScrumKenji Morita
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」Yoshinori Yamanouchi
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) Go Maeda
 
ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】Kohei Nakamura
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料Hiroki Saiki
 
はじめる! Redmine (2017)
 はじめる! Redmine (2017) はじめる! Redmine (2017)
はじめる! Redmine (2017)Go Maeda
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)Tomohisa Kusukawa
 

What's hot (20)

GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)
 
Research modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化するResearch modeで取得した深度(Depth)データを可視化する
Research modeで取得した深度(Depth)データを可視化する
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
(自分流)Gitの運用ルール
(自分流)Gitの運用ルール(自分流)Gitの運用ルール
(自分流)Gitの運用ルール
 
Git+github
Git+githubGit+github
Git+github
 
バージョン管理システム比較資料
バージョン管理システム比較資料バージョン管理システム比較資料
バージョン管理システム比較資料
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集
 
はじめてのScrum
はじめてのScrumはじめてのScrum
はじめてのScrum
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版)
 
ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料
 
はじめる! Redmine (2017)
 はじめる! Redmine (2017) はじめる! Redmine (2017)
はじめる! Redmine (2017)
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)
 

Similar to SVNからGitへ乗り換えてほしい話

Introduction git
Introduction gitIntroduction git
Introduction gitMisa Kondo
 
Git 10min
Git 10minGit 10min
Git 10mingon6109
 
2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPressYutaro Miyazaki
 
Wordbench fukuoka
Wordbench fukuokaWordbench fukuoka
Wordbench fukuokaJunji Manno
 
なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習石橋 啓太
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発s_taichan
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発Taichi Shindo
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門Mizuki Ugajin
 
WordPressサイトのバージョン管理
WordPressサイトのバージョン管理WordPressサイトのバージョン管理
WordPressサイトのバージョン管理lolipopjp
 
git&GitHub&SourceTree入門
git&GitHub&SourceTree入門git&GitHub&SourceTree入門
git&GitHub&SourceTree入門Gamu2059
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するためにShun Tsunoda
 
GitHubの入門を読む前に読む入門書
GitHubの入門を読む前に読む入門書GitHubの入門を読む前に読む入門書
GitHubの入門を読む前に読む入門書相皓 卞
 
Git勉強会資料
Git勉強会資料Git勉強会資料
Git勉強会資料Kenji Takei
 
2015年2月23日 wbtoyama 勉強会 はじめようgit
2015年2月23日 wbtoyama 勉強会 はじめようgit2015年2月23日 wbtoyama 勉強会 はじめようgit
2015年2月23日 wbtoyama 勉強会 はじめようgitSatoshi Kamigaki
 
sit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencesit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencetkimura2
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 Hiro Yoshioka
 
sensuのちょっと進んだ使い方
sensuのちょっと進んだ使い方sensuのちょっと進んだ使い方
sensuのちょっと進んだ使い方正貴 小川
 

Similar to SVNからGitへ乗り換えてほしい話 (20)

Gitを使おう
Gitを使おうGitを使おう
Gitを使おう
 
Introduction git
Introduction gitIntroduction git
Introduction git
 
Git 10min
Git 10minGit 10min
Git 10min
 
2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress
 
Wordbench fukuoka
Wordbench fukuokaWordbench fukuoka
Wordbench fukuoka
 
なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
Git勉強会 #01
Git勉強会 #01Git勉強会 #01
Git勉強会 #01
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門
 
WordPressサイトのバージョン管理
WordPressサイトのバージョン管理WordPressサイトのバージョン管理
WordPressサイトのバージョン管理
 
git&GitHub&SourceTree入門
git&GitHub&SourceTree入門git&GitHub&SourceTree入門
git&GitHub&SourceTree入門
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するために
 
GitHubの入門を読む前に読む入門書
GitHubの入門を読む前に読む入門書GitHubの入門を読む前に読む入門書
GitHubの入門を読む前に読む入門書
 
Git勉強会資料
Git勉強会資料Git勉強会資料
Git勉強会資料
 
2015年2月23日 wbtoyama 勉強会 はじめようgit
2015年2月23日 wbtoyama 勉強会 はじめようgit2015年2月23日 wbtoyama 勉強会 はじめようgit
2015年2月23日 wbtoyama 勉強会 はじめようgit
 
sit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligencesit-tokyo2022_sap-data-intelligence
sit-tokyo2022_sap-data-intelligence
 
Git入門
Git入門Git入門
Git入門
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
sensuのちょっと進んだ使い方
sensuのちょっと進んだ使い方sensuのちょっと進んだ使い方
sensuのちょっと進んだ使い方
 

SVNからGitへ乗り換えてほしい話