分散バージョン管理システムGitの紹介

29
分分分分分分分分分分分分分 Git

description

チームラボ 社内Git勉強会(2010-01-27)の資料

Transcript of 分散バージョン管理システムGitの紹介

Page 1: 分散バージョン管理システムGitの紹介

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

Page 2: 分散バージョン管理システムGitの紹介

Gitとは何か

• バージョン管理システム (VCS)

• Linuxカーネルを管理するために開発された

• 特徴–分散 VCS–高度なブランチ /マージ機能–失敗に強い

Page 3: 分散バージョン管理システムGitの紹介

オープンソースソフトウェア開発のワークフロー

• 複数の開発者がパッチを送る• フィードバックを受けつつ修正を重ねる• レビュアーの承認を得てリリースバージョンへ反映

TEST

TEST

RC 本家

Distro ADistro B

Page 4: 分散バージョン管理システムGitの紹介

オープンソース開発のワークフロー

• 大量の開発者、複数の作業が平行–単一のリポジトリではスケールしない–高度なブランチ操作が必要–ミスに強くなければいけない

Page 5: 分散バージョン管理システムGitの紹介

Gitのやりかた

• 分散 VCS–チェックアウトではなくクローン–ユーザの手元にリポジトリそのものを複製する–変更点を push/pullで同期

• コミットオブジェクト–コミットをオブジェクトとして管理–タグ /ブランチはコミットオブジェクトへのポインタ

– (後述 )

Page 6: 分散バージョン管理システムGitの紹介

Gitのオブジェクトモデル

– 1回のコミットは 1つのオブジェクトとして表される

–それぞれのコミットは親を持つ

テスト追加 バグ修正 ソース整

理 設定変更

旧 新

Page 7: 分散バージョン管理システムGitの紹介

Gitのオブジェクトモデル :ブランチ

• コミットは分岐できる• ブランチ /タグとは、特定のコミットオブジェクトを指すポインタ

バージョン 1.0

新機能追加

バグ修正

新機能バグ修正

メンテナンスブランチ

メインブランチ

タグ : v1.0

Page 8: 分散バージョン管理システムGitの紹介

メンテナンスブランチ

Gitのオブジェクトモデル :ブランチ

• ブランチ上でコミットすると、ブランチが指すコミットオブジェクトが変化

バージョン 1.0

新機能追加

バグ修正 バグ修正続き

新機能バグ修正

メンテナンスブランチ

メインブランチ

タグ : v1.0

Page 9: 分散バージョン管理システムGitの紹介

メンテナンスブランチ

Gitのオブジェクトモデル :ブランチ

• 巻き戻したりやり直したりできる

バージョン 1.0

新機能追加

バグ修正 バグ修正続き

新機能バグ修正

メンテナンスブランチ

メインブランチ

タグ : v1.0

間違ってた !

Page 10: 分散バージョン管理システムGitの紹介

Gitのオブジェクトモデル :マージ

• マージコミットは複数の親を持つ–後から追跡可能

バージョン 1.0

新機能追加

バグ修正

メンテナンスブランチ

メインブランチタグ : v1.0

メンテナンスブランチをマージ : バグ修正を反映

Page 11: 分散バージョン管理システムGitの紹介

ワークツリー、インデクス

• ワークツリー– 作業ディレクトリ

• インデクス– 中間に存在– git addコマンドでワークツリーのスナップショットを保存する– ここに保存された内容がコミットの対象となる

• コミット

ワークツリーインデックスコミット

git addgit commit

git reset

Page 12: 分散バージョン管理システムGitの紹介

ワークツリー、ブランチの選択

• ワークツリー–ワーキングツリー、ワーキングコピーとも–プロジェクトが存在するディレクトリ– SVNと同様の概念

• チェックアウト– SVNのチェックアウトとは異なる–特定のブランチを選択する操作–現在のワークツリー /インデクスの内容を、指定したコミット内容に更新する

Page 13: 分散バージョン管理システムGitの紹介

リモートリポジトリとの連携

• git cloneでリポジトリを手元に複製してくる

中央リポジトリ

ローカルリポジトリgit clone

Page 14: 分散バージョン管理システムGitの紹介

リモートリポジトリとの連携

• git cloneでリポジトリを手元に複製してくる• 手元のリポジトリに対して操作を行う

中央リポジトリ

ローカルリポジトリ

edit…

git commit

Page 15: 分散バージョン管理システムGitの紹介

リモートリポジトリとの連携

• git cloneでリポジトリを手元に複製してくる• 手元のリポジトリに対して操作を行う• push/pullで変更をリモートリポジトリと同期

中央リポジトリ

ローカルリポジトリgit push

git pull

Page 16: 分散バージョン管理システムGitの紹介

ワークフローの例

メイン

メンバ A メンバ B メンバ C

• 中央リポジトリに各自 push/pull

• 集中型 VCSと同じような感覚

Page 17: 分散バージョン管理システムGitの紹介

ワークフローの例

メイン

新人

レビュアー

• 新人のコードは直接メインリポジトリにコミットしない

• レビュー /フィードバックを経てからメインリポジトリへ

Page 18: 分散バージョン管理システムGitの紹介

ワークフローの例

メイン

メンバ 1

チーム Aリーダー

メンバ 2

チーム Bリーダー

メンバ 3 メンバ 4

• 複雑なワークフローに対応できるだけのポテンシャルがある

• (無理して複雑にしなくてもいいです )

派生

RC

メンバ 5

Page 19: 分散バージョン管理システムGitの紹介

実演

Page 20: 分散バージョン管理システムGitの紹介

コマンドとモデルの対応

remote

local

git remote add

git fetch (git pull)

git push

git init

git clone

Page 21: 分散バージョン管理システムGitの紹介

コマンドとモデルの対応

ワーキングコピーインデックスコミットgit addgit commit

git reset --hard

git commit -a

Page 22: 分散バージョン管理システムGitの紹介

Git以外の分散 VCS

• Mercurial,Bazaarあたり有名• ref: 比較記事 (2009-01)

http://www.atmarkit.co.jp/fjava/rensai4/devtool03/devtool03_5.html

• アーキテクチャはどれも似たようなもの–日本語対応とか Eclipseプラグインとか、細かいとこで違いが

–資料多いんで最初に Git覚えたらいいんじゃないですかね。

Page 23: 分散バージョン管理システムGitの紹介

Windows向け導入メモ (CUI)

• msysgit– 基本 CUIで操作 (GUIツールも同梱。 gitkべんり )– 私はこれ使ってます– インストーラ一発で導入できる– おまけにMinGW環境がついてくるので git以外の用途にも便利

• windowsでも shが使える– svnバインディング 1.4.6だよ!

• Cygwin– 仕事で既に導入してる人いそう– あのパッケージ管理どうにかならないんですかね– svnと連携する場合こっちのほうがよさげ

Page 24: 分散バージョン管理システムGitの紹介

Windows向け導入メモ (GUI)

• TortoiseGit– TortoiseSVNみたいなもの–あんまり使ったことないです– Msysgitベース

Page 25: 分散バージョン管理システムGitの紹介

把握してる問題点( windows環境)

• 日本語まわり罠がありそう–ちゃんと調査したわけではないです–日本語ファイル名がやばいという噂 (win/linu

xで文字コードが違う )• windows側クライアントが対応してれば問題ないはず

• SVNとの連携–標準で可能です–……が、Msysgit/TortoiseGitでは svnバインディング 1.4.6を使用

– svn1.5以降で作られたリポジトリを扱えない!

– cygwin版のやつならいける

Page 26: 分散バージョン管理システムGitの紹介

把握してる問題点

• SVNとの連携、遅い– SVNリポジトリから全リビジョン取ってきて gitリポジトリに変換するみたいな操作は超遅い (処理速度、だいたいリビジョンの数に比例 )

– windows環境だとさらに遅いという噂も–通常操作だけなら許容範囲か

Page 27: 分散バージョン管理システムGitの紹介

使ってみた感想• SVNには絶対戻れないくらいには便利

– Msysgitがオールインワンですばらしい• アーキテクチャがきれい

–オブジェクトモデルが直感的– SVNがどういう構造になっているのかいまだに理解できない……

• ミスってもやり直せる安心感–「コミット漏れ」みたいなクソださいコミットログを残さなくて済む!!!

–安心してマージができる

Page 28: 分散バージョン管理システムGitの紹介

使ってみた感想

• 高速、スタンドアロン–ブランチ切り替えはやい–通常のコミットはローカルで完結–ネットワーク接続が必要なのは同期時だけ

• 作業管理が楽–高速ブランチ /マージ、マージ記録の可視化–ひとつのことに集中できる–トピックブランチ

Page 29: 分散バージョン管理システムGitの紹介

まとめ

• 「入門 Git(Junio C Hamano)」読め