SlideShare a Scribd company logo
1 of 60
バージョン管理システム
2022/6/15(水)
山本 智子
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
1.バージョン管理とは
ファイルの変更を記録して、
その変更履歴を管理すること
1.バージョン管理とは
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello
World!!!!”);
記録 記録
1.バージョン管理とは
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
やっぱり昨日の
状態に戻したい
System.out.print
(“Hello
World!!!!”);
記録 記録
1.バージョン管理とは
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
やっぱり昨日の
状態に戻したい
System.out.print
(“Hello
World!!!!”);
記録 記録
1.バージョン管理とは
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
やっぱり昨日の
状態に戻したい
System.out.print
(“Hello
World!!!!”);
記録 記録
バージョン管理をすることで以前の状態に戻すことがで
きる!
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
2.バージョン管理システムの必要性
バージョン管理をするにも
いろいろな方法がある
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello
World!!!!”);
記録 記録
2.バージョン管理システムの必要性
開発.java 開発_new.java
開発
_new_new.java
記録
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello
World!!!!”);
記録 記録
2.バージョン管理システムの必要性
開発.java 開発_new.java
開発
_new_new.java
記録
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello
World!!!!”);
記録 記録
2.バージョン管理システムの必要性
開発.java 開発_new.java
開発
_new_new.java
記録
管理不可
開発1日目 開発2日目 開発3日目
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello World!”);
System.out.print
(“Hello
World!!!!”);
記録 記録
2.バージョン管理システムの必要性
開発.java 開発_new.java
開発
_new_new.java
記録
管理不可
競合が発生
することも!
2.バージョン管理システムの必要性
人がファイル名などを利用してバージョン管理
をするのは非常に難しい…
バージョン管理をもっと簡単にしたい!
バージョン管理システムを使おう!
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
開発1日目
System.out.print
(“Hello World!”);
記録
3.バージョン管理システムとは
システム司さんが
add:出力処理
2022/6/2 18:34に
リポジトリ
開発1日目
System.out.print
(“Hello World!”);
記録
3.バージョン管理システムとは
システム司さんが
add:出力処理
2022/6/2 18:34に
リポジトリ
コミット
開発1日目
System.out.print
(“Hello World!”);
記録
3.バージョン管理システムとは
システム司さんが
add:出力処理
2022/6/2 18:34に
リポジトリ
「誰が」「いつ」
「何を変更した
か」
を記録
コミット
3.バージョン管理システムとは
「集中管理方式」
「分散管理方式」
大きく2つの管理方式がある
3.バージョン管理システムとは
「集中管理方式」
とは
リポジトリ
コミット
コミット
コミット
コミット
3.バージョン管理システムとは
「集中管理方式」
とは
バージョンの管理をサーバで集中管理する
サーバ上でバージョン管理を行うため、サーバにつ
ながっていない場合使用できない
3.バージョン管理システムとは
「分散管理方式」
とは
コミット
ローカルリポジトリ
リモートリポジトリ
Push
コミット コミット コミット
Push Push
Push
3.バージョン管理システムとは
「分散管理方式」
とは
利用者がサーバからローカルにリポジトリのコピーをす
ることで、バージョンの管理をそれぞれのマシン内で分
散管理する
ローカルリポジトリでバージョン管理、随時サーバ上の
リポジトリに変更を反映する
ローカルにリポジトリを持つため、サーバに繋ぐことな
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
4.主要なバージョン管理システム
「分散管理方式」
「集中管理方式」
CVS(Concurrent Versions System)
SVN(Apache Subversion)
Git
4.主要なバージョン管理システム
主要なコマンドから
gitの考え方を理解しよう!
Git
4.主要なバージョン管理システム
Git主要コマンド
git clone
git pull
git add
git commit
git push
リモートリポジトリ
4.主要なバージョン管理システム
git clone … リモートリポジトリのコ
ピーを作成
あのソー
スを
触りたい
リモートリポジトリ
4.主要なバージョン管理システム
git clone … リモートリポジトリのコ
ピーを作成
あのソー
スを
触りたい
ローカルリポジトリ
git clone
リモートリポジトリのコピーができ、
ソース修正ができるようになる!
リモートリポジトリ
4.主要なバージョン管理システム
git pull … 最新のリモートリポジトリを
取得
ローカルリポジトリ
コミット
push/反映
リポジトリの
内容が乖離
最新ソー
スが欲し
い
リモートリポジトリ
4.主要なバージョン管理システム
git pull … 最新のリモートリポジトリを
取得
最新ソー
スが欲し
い
ローカルリポジトリ
git pull
コミット
push/反映
リポジトリの
内容が乖離
最新の更新内容をローカルに反映するこ
とで、
リポジトリの内容の乖離が解消!
ローカルリポジトリ
4.主要なバージョン管理システム
git add … コミット対象の指定
修正内容を
管理対象にした
い
System.out
.print(“Hell
o World!”);
test.java
git add text.java
インデックス
ワークツリー
ローカルリポジトリ
4.主要なバージョン管理システム
git add … コミット対象の指定
修正内容を
管理対象にした
い
System.out
.print(“Hell
o World!”);
test.java
git add text.java
インデックス
ステージングエリ
ア
ともいう!
ワークツリー
ローカルリポジトリ
4.主要なバージョン管理システム
git add … コミット対象の指定
修正内容を
管理対象にした
い
System.out
.print(“Hell
o World!”);
test.java
git add text.java
インデックス
ステージングエリ
ア
ともいう!
ワークツリー
コミット対象(管理対象)を指定!
4.主要なバージョン管理システム
ローカルリポジトリ
インデックス
ワークツリー
git commit … コミット(修正記録の作成)
System.out
.print(“Hell
o World!”);
test.java
修正内容
を
一つの記
録
にしたい
4.主要なバージョン管理システム
ローカルリポジトリ
インデックス
ワークツリー
git commit … コミット(修正記録の作成)
System.out
.print(“Hell
o World!”);
test.java
修正内容
を
一つの記
録
にしたい
git commit –m “出力内容の追加”
コメントをつけることができ
る!
ローカルリポジトリに修正を反映!
リモートリポジトリ
4.主要なバージョン管理システム
git push … コミットをリモートリポジトリ
に反映
ローカルリポジトリ
コミットした内容を
リモートに反映させ
たい
先ほどのコミット
により内容が乖離
リモートリポジトリ
4.主要なバージョン管理システム
git push … コミットをリモートリポジトリ
に反映
ローカルリポジトリ
コミットした内容を
リモートに反映させ
たい
先ほどのコミット
により内容が乖離
git push
最新の更新内容をリモートに反映すること
で、
リポジトリの内容の乖離が解消!
4.主要なバージョン管理システム
Git主要コマンドま
とめ
git clone … リモートリポジトリのコピーを
作成
git pull … 最新のリモートリポジトリを取得
git add … コミット対象の指定
git commit … コミット(修正記録の作成)
目次
1. バージョン管理とは
2. バージョン管理システムの必要性
3. バージョン管理システムとは
4. 主要なバージョン管理システム
5. まとめ
5.まとめ
バージョン管理とは、ファイルの変更を記録して
その変更履歴を管理すること
バージョン管理にはいろいろな方法があるが、手
動で行うのは大変なので、バージョン管理のため
のシステムが存在する
今現場でよく見るのはGit
5.まとめ
Git主要コマンドま
とめ
git clone … リモートリポジトリのコピーを
作成
git pull … 最新のリモートリポジトリを取得
git add … コミット対象の指定
git commit … コミット(修正記録の作成)
5.まとめ
正しく仕組みを理解して、
うまく利用できるようになろう!
おわ
り
補足
Git - Branch
「ブランチ」と
は?
リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
この間リリースしたバージョン
の
バグを修正したい!
A社向け
カスタマイズ機能を追加した
バージョンを作成したい!
Git - Branch
「ブランチ」と
は?
リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
この間リリースしたバージョン
の
バグを修正したい!
A社向け
カスタマイズ機能を追加した
バージョンを作成したい!
このまま修正、pushすると、
二つのバージョンの
変更が混ざってしまう
Git - Branch
「ブランチ」と
は? ローカルリポジトリ
この間リリースしたバージョン
の
バグを修正したい!
master
この間リリース
したバージョン
コミット
Git - Branch
「ブランチ」と
は? ローカルリポジトリ
A社向け
カスタマイズ機能を追加した
バージョンを作成したい!
master
この間リリース
したバージョン
コミット
forA
コミット
git branch –b
forA
Git - Branch
「ブランチ」と
は? ローカルリポジトリ
A社向け
カスタマイズ機能を追加した
バージョンを作成したい!
master
この間リリース
したバージョン
コミット
forA
コミット
git branch –b
forA
履歴登録の新たな「流れ」を作成できる!
Git - Branch
「ブランチ」と
は? ローカルリポジトリ
A社向けカスタマイズ機能を
以前のバージョンにも追加した
い…
master
forA
コミット
git merge forA
Git - Branch
「ブランチ」と
は? ローカルリポジトリ
A社向けカスタマイズ機能を
以前のバージョンにも追加した
い…
master
forA
コミット
git merge forA
ブランチをまとめる(合流/merge)ことも可
能!
Git - pull
pull = fetch + merge
リモートリポジトリ
最新ソー
スが欲し
い
ローカルリポジトリ
git pull
コミット
push/反映
Git - pull
pull = fetch + merge
リモートリポジトリ
最新ソー
スが欲し
い
ローカルリポジトリ
(リモート追跡ブランチ)
git fetch
git merge
git pull
ワークツリー
Git - pull
pull = fetch + merge
リモートリポジトリ
最新ソー
スが欲し
い
ローカルリポジトリ
(リモート追跡ブランチ)
git fetch
git merge
git pull
ワークツリー
git push
git commit
Git - Conflict
「競合」とは? リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
A
D
B
C
A
B
C
A
F
B
C
git push
git pull
(merge)
Git - Conflict
「競合」とは? リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
A
D
B
C
A
B
C
A
F
B
C
git push
git pull
(merge)
同じ行を修正すると、
どちらを反映すべきか
判断できない
⇒ 競合(自動マージ不可)
Git - Conflict
「競合」とは? リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
A
D
B
C
A
B
C
A
F
B
C
git push
git pull
(merge)
どっちの修正も必
要!
Git - Conflict
「競合」とは? リモートリポジトリ
ローカルリポジトリ ローカルリポジトリ
A
D
B
C
A
B
C
A
F
B
C
git push
git pull
(merge)
どっちの修正も必
要!
commit/pushすれば
競合解消!

More Related Content

Similar to 【閲覧用】新人教育向け_バージョン管理システム.pptx

20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
s_taichan
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
Taichi Shindo
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-
Koji Shinba
 

Similar to 【閲覧用】新人教育向け_バージョン管理システム.pptx (20)

GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップ
 
超簡単!バージョン管理入門 最初の一歩
超簡単!バージョン管理入門 最初の一歩超簡単!バージョン管理入門 最初の一歩
超簡単!バージョン管理入門 最初の一歩
 
20130608 git-0
20130608 git-020130608 git-0
20130608 git-0
 
Aedlabo git seminer
Aedlabo git seminerAedlabo git seminer
Aedlabo git seminer
 
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
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015
 
git入門(講義っぽく)
git入門(講義っぽく)git入門(講義っぽく)
git入門(講義っぽく)
 
Redmineを使ってみよう
Redmineを使ってみようRedmineを使ってみよう
Redmineを使ってみよう
 
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-
 
Git&GitHub入門
Git&GitHub入門Git&GitHub入門
Git&GitHub入門
 
SCOMと管理パックで DBや仮想環境の監視のお悩みを解決
SCOMと管理パックでDBや仮想環境の監視のお悩みを解決SCOMと管理パックでDBや仮想環境の監視のお悩みを解決
SCOMと管理パックで DBや仮想環境の監視のお悩みを解決
 
はこだてIKA夜間勉強会 バージョン管理#01 -Subversion編-
はこだてIKA夜間勉強会 バージョン管理#01 -Subversion編-はこだてIKA夜間勉強会 バージョン管理#01 -Subversion編-
はこだてIKA夜間勉強会 バージョン管理#01 -Subversion編-
 
バージョン管理#01 -Subversion編-
バージョン管理#01 -Subversion編-バージョン管理#01 -Subversion編-
バージョン管理#01 -Subversion編-
 
型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
 

【閲覧用】新人教育向け_バージョン管理システム.pptx