git

45
Git Powered by Rabbit 0.6.5 Git とみたまさひろ 2010-09-30

Upload: masahiro-tomita

Post on 20-May-2015

3.458 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Git

Git Powered by Rabbit 0.6.5

Git

とみたまさひろ2010-09-30

Page 2: Git

Git Powered by Rabbit 0.6.5

Git暦浅いので嘘書いてある

かもしれません1/44

Page 3: Git

Git Powered by Rabbit 0.6.5

Git

分散バージョン管理システム✓

2/44

Page 4: Git

Git Powered by Rabbit 0.6.5

分散バージョン管理

バージョン管理✓

分散✓

3/44

Page 5: Git

Git Powered by Rabbit 0.6.5

昭和のバージョン管理

% lsfile.rbfile.rb.origfile.rb.bakfile.rb.bak_20100615file.rb.bak_tommyfile.rb.new

4/44

Page 6: Git

Git Powered by Rabbit 0.6.5

昭和のバージョン管理

# 20100701 tommy コメントアウトはじまり# # 20100615 tommy コメントアウトはじまり# # var = 123# # 20100615 tommy コメントアウトおわり# var = 456# 20100701 tommy コメントアウトおわりvar = 789

5/44

Page 7: Git

Git Powered by Rabbit 0.6.5

バージョン管理システム

誰がいつファイルをどのように変更したのかを記録

任意の時点のものを取り出すことができる

6/44

Page 8: Git

Git Powered by Rabbit 0.6.5

歴史SCCS, RCS

ファイル単体を管理✓

CVSファイル群を管理✓

ネットワーク対応✓

Subversionリポジトリ管理✓

7/44

Page 9: Git

Git Powered by Rabbit 0.6.5

歴史

Git✓

Mercurial(HG)✓

Bazaar分散✓

8/44

Page 10: Git

Git Powered by Rabbit 0.6.5

黒歴史

VSS✓

9/44

Page 11: Git

Git Powered by Rabbit 0.6.5

集中型と分散型Subversion

リポジトリは1つ✓

中央集中型✓

リビジョン番号がインクリメンタル✓

Gitリポジトリは複数✓

ユーザー毎に1個以上✓

16進40桁のコミット名✓

10/44

Page 12: Git

Git Powered by Rabbit 0.6.5

集中型

commit すると全員に影響する✓

ネットワークが繋がってないと commit 不可

11/44

Page 13: Git

Git Powered by Rabbit 0.6.5

Subversion

ブランチ、タグの仕組みがない運用で回避✓

マージがへぼいマージのログメッセージは人力✓

12/44

Page 14: Git

Git Powered by Rabbit 0.6.5

分散型/Git

自分のPCにリポジトリがある✓

いつでも commit できる✓

まとまったらリモートに push✓

マージが自動/速い/賢い✓

13/44

Page 15: Git

Git Powered by Rabbit 0.6.5

Git

Linus Torvalds が開始✓

今のGitのプロジェクトリーダーは日本人

14/44

Page 16: Git

Git Powered by Rabbit 0.6.5

入門Gitおすすめ

15/44

Page 17: Git

Git Powered by Rabbit 0.6.5

インストール

Ubuntu/Debian

# aptitude install git-core

16/44

Page 18: Git

Git Powered by Rabbit 0.6.5

インストールWindows

msysgit

http://code.google.com/p/msysgit/

TortoiseGit

http://code.google.com/p/tortoisegit/

Git Extensions

http://code.google.com/p/gitextensions/ 17/44

Page 19: Git

Git Powered by Rabbit 0.6.5

初期設定

名前とメールアドレスの登録など

$ git config --global user.name 'TOMITA Masahiro'$ git config --global user.email '[email protected]'$ git config --global color.ui auto

18/44

Page 20: Git

Git Powered by Rabbit 0.6.5

リポジトリの作成

$ git init

カレントディレクトリがリポジトリ兼作業ディレクトリになる

19/44

Page 21: Git

Git Powered by Rabbit 0.6.5

複製して作成

$ git clone http://github.com/tmtm/mailparser

別のリポジトリから複製して自分用リポジトリを作成する

ログもブランチも含めて全部コピー✓

20/44

Page 22: Git

Git Powered by Rabbit 0.6.5

状態遷移

21/44

Page 23: Git

Git Powered by Rabbit 0.6.5

ファイルの追加&コミット

$ touch file$ git add file$ git commit -m 'add file'

22/44

Page 24: Git

Git Powered by Rabbit 0.6.5

ファイルの変更&コミット

$ vi file$ git add file$ git commit -m 'modify file'

23/44

Page 25: Git

Git Powered by Rabbit 0.6.5

インデックスとコミット

$ echo line1 > file$ git add file$ git commit -m 'add line1'$ echo line2 >> file$ git add file$ echo line3 >> file

24/44

Page 26: Git

Git Powered by Rabbit 0.6.5

状態

$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: file## Changed but not updated:# (use "git add <file>..." to update what will# be committed)# (use "git checkout -- <file>..." to discard# changes in working directory)## modified: file#

25/44

Page 27: Git

Git Powered by Rabbit 0.6.5

差分表示

インデックスと作業ディレクトリの差分

$ git diff--- a/file+++ b/file@@ -1,2 +1,3 @@ line1 line2+line3

26/44

Page 28: Git

Git Powered by Rabbit 0.6.5

差分表示

リポジトリとインデックスの差分

$ git diff --cached--- a/file+++ b/file@@ -1 +1,2 @@ line1+line2

27/44

Page 29: Git

Git Powered by Rabbit 0.6.5

差分表示

リポジトリと作業ディレクトリの差分

$ git diff HEAD--- a/file+++ b/file@@ -1 +1,3 @@ line1+line2+line3

28/44

Page 30: Git

Git Powered by Rabbit 0.6.5

ログ

$ git logcommit 5af78980b5ffa64f63e6637e25e4bc82bd1d5ef2Author: TOMITA Masahiro <[email protected]>Date: Wed Sep 29 22:33:06 2010 +0900

add line3

commit 99388353c1e8960caa406bd6bb5dcf47a9a27c8eAuthor: TOMITA Masahiro <[email protected]>Date: Wed Sep 29 22:33:01 2010 +0900

add line2

commit 6c2faf7cd982a5eb468d672f188675ddf25634ddAuthor: TOMITA Masahiro <[email protected]>Date: Wed Sep 29 22:32:34 2010 +0900

add line1

29/44

Page 31: Git

Git Powered by Rabbit 0.6.5

ログ

# ファイル名も表示$ git log --name-status

# 内容の差分も表示$ git log -p

30/44

Page 32: Git

Git Powered by Rabbit 0.6.5

コミット名16進数40桁の識別子

ファイル名や内容等を SHA-1 ハッシュ化したもの

たいていは先頭 5桁くらいで判別可能✓

先頭は HEAD で参照可能✓

HEAD^ 一つ前✓

HEAD~3 三つ前✓31/44

Page 33: Git

Git Powered by Rabbit 0.6.5

タグ

コミット名に名前をつける

$ git tag v0.1 6c2fa$ git tag v0.2 99388$ git tag v0.3 5af78$ git tag ← タグ一覧表示v0.1v0.2v0.3

32/44

Page 34: Git

Git Powered by Rabbit 0.6.5

特定コミットの詳細

$ git show v0.2commit 99388353c1e8960caa406bd6bb5dcf47a9a27c8eAuthor: TOMITA Masahiro <[email protected]>Date: Wed Sep 29 22:33:01 2010 +0900

add line2

diff --git a/file b/fileindex a29bdeb..c0d0fb4 100644--- a/file+++ b/file@@ -1 +1,2 @@ line1+line2

33/44

Page 35: Git

Git Powered by Rabbit 0.6.5

ブランチ

別の歴史を作る

A---B---C---D---E ← master \ F---G ← Cから派生したブランチ

34/44

Page 36: Git

Git Powered by Rabbit 0.6.5

ブランチ

$ git branch ← ブランチ一覧* master ← 現在のブランチには * がつく$ git branch b0.2 v0.2 ← v0.2 から b0.2 ブランチを作成$ git branch b0.2* master$ git checkout b0.2 ← b0.2 に切り替え$ git branch * b0.2 master

35/44

Page 37: Git

Git Powered by Rabbit 0.6.5

マージ

ログメッセージも含みすべてマージ

$ git branch hoge ...

C---E---G hoge /A---B---D---F master

$ git checkout master$ git merge hoge

C---E---G hoge / \A---B---D----F----H master

36/44

Page 38: Git

Git Powered by Rabbit 0.6.5

リモートリポジトリ

別のリポジトリ(同じマシン上にあっても)

git clone で作成すると、origin として登録される

$ git clone http://github.com/tmtm/mailparser.git$ cd mailparser$ git remoteorigin$ git remote -vorigin http://github.com/tmtm/mailparser.git (fetch)origin http://github.com/tmtm/mailparser.git (push)

37/44

Page 39: Git

Git Powered by Rabbit 0.6.5

リモートリポジトリ

後でリモートの追加も可能

$ git init$ git remote add origin http://github.com/tmtm/mailparser.git$ git remote -vorigin http://github.com/tmtm/mailparser.git (fetch)origin http://github.com/tmtm/mailparser.git (push)

38/44

Page 40: Git

Git Powered by Rabbit 0.6.5

リモートリポジトリgit fetch

リモートをローカルに取り込む✓

git pullリモートのローカルに取り込み、現在のブランチにマージする

git pushローカルの変更をリモートに反映させる

39/44

Page 41: Git

Git Powered by Rabbit 0.6.5

リモートブランチ

リモートブランチはローカルブランチとは異なる

「git branch -r」で表示される✓

ローカルに反映させるにはマージ✓

40/44

Page 42: Git

Git Powered by Rabbit 0.6.5

タグ

タグは自動的には同期しない。✓

ローカルタグをリモートに反映させるには git push --tags

41/44

Page 43: Git

Git Powered by Rabbit 0.6.5

pull

git pull は fetch 後 merge

A---B---C---D---E \ / a---b---c

42/44

Page 44: Git

Git Powered by Rabbit 0.6.5

rebase

「git pull --rebase」で rebase される

A---B---a---b---c---C---D---E

43/44

Page 45: Git

Git Powered by Rabbit 0.6.5

以上44/44