More Related Content Similar to SCMBC Git入門セッション発表資料
Similar to SCMBC Git入門セッション発表資料 (12) More from bleis tift (20) SCMBC Git入門セッション発表資料2. Git のリポジトリ
リポジトリ = データを貯めるところ
Git ではリポジトリがローカルにある
SVNではローカルにないことが多い
ローカルのリポジトリに対する操作は高速 (通信不要)
push, pull などを使って同期を取る (通信がここで発生)
手元のリポジトリではコンフリクトしない
SCMBC Git 資料
3. 多人数開発
SVNでは1リポジトリ複数ツ
リー
Gitでは個人がリポジトリを
SCMBC Git 資料 持つ
Figures from Pro Git http://progit.org/book/ja/ch5-1.html
4. 多人数開発
共有リポジトリに pull, push をする
共有リポジトリは複数ある場合も
CIサーバとステージング用と、、、
SCMBC Git 資料
Figures from Pro Git http://progit.org/book/ja/ch5-1.html
5. Git のオブジェクト
すべて Immutable
作成されたら破棄されないかぎり変更されない
Blob : ファイルの中身
Tree : ディレクトリ構成
Commit : コミット内容
(Tag)
SCMBC Git 資料
6. Blob オブジェクト
ファイルの中身だけを表す
ファイル名などは Tree オブジェクトが保持
Tree や Commit をまたいで参照される
このために Immutable になっている
差分ではなく、スナップショット
SCMBC Git 資料
7. Tree オブジェクト
ディレクトリ構成を表す
子ファイル
子ディレクトリ
同一のオブジェクトは複数のツリーから参照される
ディスクの空間効率をよくするため
SCMBC Git 資料
8. 実ファイルと Git オブジェクト
850fc9..
Tree
/ 100644 25b351..
a
25b351.. 40000 219852.. t 219852..
a t Blob Tree
0010011010100 100644 989209..
1 b
100755 1b0938..
b c 989209.. c 1b0938..
Blob Blob
1110010110110 1001010110010
1 1
SCMBC Git 資料
9. Commit オブジェクト
コミット(リビジョンの記録)
コミットした人、時間、メッセージ
親コミット
ルート Tree …
親コミット
通常ひとつ
マージした場合、複数
初回コミットにはない
親コミットを順にたどることで歴史がわかる
SCMBC Git 資料
10. コミットメッセージ
普通にGitを使うとコミットメッセージは必須
空だとエラーになる
一行目に概要、二行目を空白にして、三行目以降に
詳細
色々なコマンド (主にログ系) がこのフォーマット前提
詳細が不要な時は一行目だけ
SCMBC Git 資料
12. git init
/
a t .git
b c
SCMBC Git 資料
13. git add .
/
a t .git
b c
/
a t
Tree オブジェクトや
Blob オブジェクトが作ら
れる
b c
SCMBC Git 資料
14. git commit
/
a t .git
A Commit オブジェクトが作ら
れる
b c
/
a t
b c
SCMBC Git 資料
15. edit a; git add a; git commit
/
新しいコミットオブ
a’
a t .git ジェクト
A B
b c
/ /
a a’ aを編集してa’にした
t
t以下はいじってないので
b c
そのままのものが使われ
る
SCMBC Git 資料
16. a を t 配下に移動 (mv a t/a)
/
t .git
A B
a b c
/ /
a a’
t
b c
SCMBC Git 資料
17. git add -A; git commit
/
新しいコミットオブ
t .git ジェクト
A B C
a b c
/ / /
a a’
t t
Tree は変更された
b c
が
SCMBC Git 資料
Blob はそのまま
18. オブジェクトのハッシュ値
すべてのオブジェクトの SHA-1 ハッシュ
比較はすべてハッシュ値で行う
世界中で(事実上の)一意性が担保される
SVNなど連番リビジョン番号との違い
リポジトリが分散しても安心(後述)
リモートとの通信でもハッシュ値でオブジェクトに
ついて判断できるので高速、低負荷
SCMBC Git 資料
19. ブランチ
Commit オブジェクト(ハッシュ値)へのポインタ
作成、削除が高速
Commit オブジェクトの親コミットをたどることでブ
ランチが表現できる
ブランチの切り替え
重複しているオブジェクトをハッシュ値で区別
SCMBC Git 資料
20. ブランチの使い方
最初は master
git branch で作成
git checkout で移動
フィーチャブランチ(トピックブランチ)
機能ごとにブランチをきる
短命なブランチ
さまざまなプラクティス
A successful Git branching model
英語: http://nvie.com/posts/a-successful-git-branching-model/
日本語:http://keijinsonyaban.blogspot.com/2010/10/successful-git-branching-model.html
SCMBC Git 資料
24. edit & git commit …
HEAD
b
99214 111115
ba31c 23ca1
master
SCMBC Git 資料
27. git merge b
b
99214 111115
ba31c 23ca1
12bae ccb32
master
HEAD
両方の変更点を問題ない形で持つ
SCMBC Git 資料
28. git reset --hard 23ca1
b
99214 111115
ba31c 23ca1
12bae ccb32
master
HEAD
SCMBC Git 資料
29. git merge b
HEAD
b master
99214 111115
ba31c 23ca1
12bae ccb32
ブランチを移動するだけでマージ完了
→fast forward merge
SCMBC Git 資料
30. git reset --hard 12bae
b
99214 111115
ba31c 23ca1
12bae ccb32
master
HEAD
SCMBC Git 資料
31. ちょっと表記を変更
b
1 2
A B
C M
master
HEAD
SCMBC Git 資料
35. 実はSVNでもやってた
自分
未コミッ
ト
A B
C D
リポジト
リ
競合が発生してコミットできない・・・
SCMBC Git 資料
38. 分散リポジトリの例
repository A
ba31c 23ca1
git clone
repository B
ba31c 23ca1
SCMBC Git 資料
39. 分散リポジトリの例
repository A
ba31c 23ca1 924c3
リポジトリはバラバラに成長するが、区別
できる
repository B
ba31c 23ca1 7128d
SCMBC Git 資料
40. git fetch origin
repository A
ba31c 23ca1 924c3
変更分だけ取得
repository B origin/master
924c3
ba31c 23ca1
7128d
master
SCMBC Git 資料
41. git merge origin/master; git push
repository A
ba31c 23ca1 924c3 23ca1
7128d
変更点を通知
repository B
origin/master
924c3
ba31c 23ca1 23ca1
7128d master
SCMBC Git 資料
42. さいごに
オブジェクトを理解し、
ブランチの考え方を理解し、
コミットグラフを頭に思い浮かべることができれば
勝てる
そうすればresetとかrebaseも理解しやすい
よ!みんなでreset/rebaseしまくろ
う!
SCMBC Git 資料