(工事中) git の仕組み
TRANSCRIPT
(工事中) Git の仕組み
開発部齋藤 輝明
入門Git1. gitとは
2. gitの基本概念
3. インストールと初期構成
4. 独りで使う
5. 2か所で使う
6. グループで使う
7. ブランチを使った開発
8. 分散環境とブランチとの関連
9. 変更履歴を追いかける
10. パッチ・べースのワークフロー
11. ゴミファイルの無視
12. 構成変数
13. リモート・リポジトリ定義
14. ファイル・アトリビュート
15. 歴史の2分探索
16. 間違いからの回復
17. フック・メカニズム
18. リポジトリの出版公開
19. gitの周辺
アジェンダ
1. Git って何?おいしいの?
2. Git はオブジェクトの集合体で管理するよ!
3. ブランチ / タグはただのポインタだよ!
4. コミットは 3 層を意識しよう!
5. merge! cherry-pick! rebase!
アジェンダ
1. Git って何?おいしいの?
2. Git はオブジェクトの集合体で管理するよ!
3. ブランチ / タグはただのポインタだよ!
4. コミットは 3 層を意識しよう!
5. merge! cherry-pick! rebase!
コマンドの使い方とかを教えてほしい?
本を読むか、Google 先生に訊いてください。
アジェンダ
1. Git って何?おいしいの?
2. Git はオブジェクトの集合体で管理するよ!
3. ブランチ / タグはただのポインタだよ!
4. コミットは 3 層を意識しよう!
5. merge! cherry-pick! rebase!
Git とは?
● オープンソースで開発されているバージョン管理システム
● Linus Torvalds が Linux カーネルのソース管理のために開発を始めたツール
● 種類はバージョン管理システムの分散型に含まれる
集中型 (CVS, Subversion)
リポジトリ
ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群
com
mit
com
mit com
mit
upda
te
update
update
ローカルリポジトリ
分散型 (Git)
共用リポジトリ
ファイル・ディレクトリ群 ファイル・ディレクトリ群 ファイル・ディレクトリ群
com
mit
com
mit
ローカルリポジトリ ローカルリポジトリ
push
push
push
fetch
fetchfetch
com
mit
Subversion の作業例
> svn update> > emacs test1.js> svn commit> > emacs test2.js> git commit
# リポジトリの修正をローカルのファイル・ディレクトリ群に反映
# test1.js をエディタで修正
# test1.js をリポジトリに反映
# test2.js をエディタで修正
# test2.js をリポジトリに反映
Git の作業例
> git fetch> git merge origin/master> > emacs test1.js> git add test1.js> git commit> > emacs test2.js> git add test2.js> git commit> > git push
# 共用リポジトリから修正差分を取得
# ローカルリポジトリにマージ
# test1.js をエディタで修正
# test1.js をコミット対象に指定
# コミット対象のものをローカルリポジトリににコミット
# test2.js をエディタで修正
# test2.js をコミット対象に指定
# コミット対象のものをローカルリポジトリににコミット
# ローカルリポジトリの修正内容を共用リポジトリに反映
Git の作業例 (簡略化)
> git pull> > emacs test1.js> git commit -a> > emacs test2.js> git commit -a> > git push
# 共用リポジトリから修正差分を取得して、ローカルリポジトリにマージ
# test1.js をエディタで修正
# 修正されたファイル群をローカルリポジトリにコミット
# test2.js をエディタで修正
# 修正されたファイル群をローカルリポジトリににコミット
# ローカルリポジトリの修正内容を共用リポジトリに反映
分散型の特長
● ネットワークから分離されている環境でも、ローカルのリポジトリ中で仕事が続けられる
● 他人に悪影響を及ぼすことを恐れずに、大規模な実験的な変更を自由に行ない、その途中経過を記録しておくことができる
● まとまった変更がいったん完成した時点で、履歴を見なおして、適切な形に書き直してから公開することができる
アジェンダ
1. Git って何?おいしいの?
2. Git はオブジェクトの集合体で管理するよ!
3. ブランチ / タグはただのポインタだよ!
4. コミットは 3 層を意識しよう!
5. merge! cherry-pick! rebase!
Git はオブジェクト
● Git は「オブジェクト」と呼ばれるデータの集合体
● オブジェクトの内容を基に生成されたハッシュをキーとした Key Value Storeで管理されている
● .git/objects 下に格納されている
主なオブジェクトの種類
● blob○ ファイルの中身を表す
● tree○ ディレクトリの中身を表す
● commit○ 修正差分を表す
オブジェクトの構造
オブジェクト名
ヘッダ情報(型と長さ)
オブジェクトの内容(型により異なる)
SHA-1ハッシュ
blob オブジェクトの例
bbc4538...
blob 538
#include <studio.h>
int main(void) { printf("Hello World!");}
tree オブジェクトの例
b1242d7...
tree 224
100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js
tree オブジェクトの例
b1242d7...
tree 224
100644 bbc4538... README040000 428b354... lib100755 bfef14a5... start.js型を表す オブジェクト名
ディレクトリ・ファイルの表現例
出典: http://www.progit.org/book/ja/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88