分散バージョン管理システムGitの紹介
-
Upload
todesking -
Category
Technology
-
view
5.994 -
download
0
description
Transcript of 分散バージョン管理システムGitの紹介
分散バージョン管理システムGit
Gitとは何か
• バージョン管理システム (VCS)
• Linuxカーネルを管理するために開発された
• 特徴–分散 VCS–高度なブランチ /マージ機能–失敗に強い
オープンソースソフトウェア開発のワークフロー
• 複数の開発者がパッチを送る• フィードバックを受けつつ修正を重ねる• レビュアーの承認を得てリリースバージョンへ反映
TEST
TEST
RC 本家
Distro ADistro B
オープンソース開発のワークフロー
• 大量の開発者、複数の作業が平行–単一のリポジトリではスケールしない–高度なブランチ操作が必要–ミスに強くなければいけない
Gitのやりかた
• 分散 VCS–チェックアウトではなくクローン–ユーザの手元にリポジトリそのものを複製する–変更点を push/pullで同期
• コミットオブジェクト–コミットをオブジェクトとして管理–タグ /ブランチはコミットオブジェクトへのポインタ
– (後述 )
Gitのオブジェクトモデル
– 1回のコミットは 1つのオブジェクトとして表される
–それぞれのコミットは親を持つ
テスト追加 バグ修正 ソース整
理 設定変更
旧 新
Gitのオブジェクトモデル :ブランチ
• コミットは分岐できる• ブランチ /タグとは、特定のコミットオブジェクトを指すポインタ
バージョン 1.0
新機能追加
バグ修正
新機能バグ修正
メンテナンスブランチ
メインブランチ
タグ : v1.0
メンテナンスブランチ
Gitのオブジェクトモデル :ブランチ
• ブランチ上でコミットすると、ブランチが指すコミットオブジェクトが変化
バージョン 1.0
新機能追加
バグ修正 バグ修正続き
新機能バグ修正
メンテナンスブランチ
メインブランチ
タグ : v1.0
メンテナンスブランチ
Gitのオブジェクトモデル :ブランチ
• 巻き戻したりやり直したりできる
バージョン 1.0
新機能追加
バグ修正 バグ修正続き
新機能バグ修正
メンテナンスブランチ
メインブランチ
タグ : v1.0
間違ってた !
Gitのオブジェクトモデル :マージ
• マージコミットは複数の親を持つ–後から追跡可能
バージョン 1.0
新機能追加
バグ修正
メンテナンスブランチ
メインブランチタグ : v1.0
メンテナンスブランチをマージ : バグ修正を反映
ワークツリー、インデクス
• ワークツリー– 作業ディレクトリ
• インデクス– 中間に存在– git addコマンドでワークツリーのスナップショットを保存する– ここに保存された内容がコミットの対象となる
• コミット
ワークツリーインデックスコミット
git addgit commit
git reset
ワークツリー、ブランチの選択
• ワークツリー–ワーキングツリー、ワーキングコピーとも–プロジェクトが存在するディレクトリ– SVNと同様の概念
• チェックアウト– SVNのチェックアウトとは異なる–特定のブランチを選択する操作–現在のワークツリー /インデクスの内容を、指定したコミット内容に更新する
リモートリポジトリとの連携
• git cloneでリポジトリを手元に複製してくる
中央リポジトリ
ローカルリポジトリgit clone
リモートリポジトリとの連携
• git cloneでリポジトリを手元に複製してくる• 手元のリポジトリに対して操作を行う
中央リポジトリ
ローカルリポジトリ
edit…
git commit
リモートリポジトリとの連携
• git cloneでリポジトリを手元に複製してくる• 手元のリポジトリに対して操作を行う• push/pullで変更をリモートリポジトリと同期
中央リポジトリ
ローカルリポジトリgit push
git pull
ワークフローの例
メイン
メンバ A メンバ B メンバ C
• 中央リポジトリに各自 push/pull
• 集中型 VCSと同じような感覚
ワークフローの例
メイン
新人
レビュアー
• 新人のコードは直接メインリポジトリにコミットしない
• レビュー /フィードバックを経てからメインリポジトリへ
ワークフローの例
メイン
メンバ 1
チーム Aリーダー
メンバ 2
チーム Bリーダー
メンバ 3 メンバ 4
• 複雑なワークフローに対応できるだけのポテンシャルがある
• (無理して複雑にしなくてもいいです )
派生
RC
メンバ 5
実演
コマンドとモデルの対応
remote
local
git remote add
git fetch (git pull)
git push
git init
git clone
コマンドとモデルの対応
ワーキングコピーインデックスコミットgit addgit commit
git reset --hard
git commit -a
Git以外の分散 VCS
• Mercurial,Bazaarあたり有名• ref: 比較記事 (2009-01)
http://www.atmarkit.co.jp/fjava/rensai4/devtool03/devtool03_5.html
• アーキテクチャはどれも似たようなもの–日本語対応とか Eclipseプラグインとか、細かいとこで違いが
–資料多いんで最初に Git覚えたらいいんじゃないですかね。
Windows向け導入メモ (CUI)
• msysgit– 基本 CUIで操作 (GUIツールも同梱。 gitkべんり )– 私はこれ使ってます– インストーラ一発で導入できる– おまけにMinGW環境がついてくるので git以外の用途にも便利
• windowsでも shが使える– svnバインディング 1.4.6だよ!
• Cygwin– 仕事で既に導入してる人いそう– あのパッケージ管理どうにかならないんですかね– svnと連携する場合こっちのほうがよさげ
Windows向け導入メモ (GUI)
• TortoiseGit– TortoiseSVNみたいなもの–あんまり使ったことないです– Msysgitベース
把握してる問題点( windows環境)
• 日本語まわり罠がありそう–ちゃんと調査したわけではないです–日本語ファイル名がやばいという噂 (win/linu
xで文字コードが違う )• windows側クライアントが対応してれば問題ないはず
• SVNとの連携–標準で可能です–……が、Msysgit/TortoiseGitでは svnバインディング 1.4.6を使用
– svn1.5以降で作られたリポジトリを扱えない!
– cygwin版のやつならいける
把握してる問題点
• SVNとの連携、遅い– SVNリポジトリから全リビジョン取ってきて gitリポジトリに変換するみたいな操作は超遅い (処理速度、だいたいリビジョンの数に比例 )
– windows環境だとさらに遅いという噂も–通常操作だけなら許容範囲か
使ってみた感想• SVNには絶対戻れないくらいには便利
– Msysgitがオールインワンですばらしい• アーキテクチャがきれい
–オブジェクトモデルが直感的– SVNがどういう構造になっているのかいまだに理解できない……
• ミスってもやり直せる安心感–「コミット漏れ」みたいなクソださいコミットログを残さなくて済む!!!
–安心してマージができる
使ってみた感想
• 高速、スタンドアロン–ブランチ切り替えはやい–通常のコミットはローカルで完結–ネットワーク接続が必要なのは同期時だけ
• 作業管理が楽–高速ブランチ /マージ、マージ記録の可視化–ひとつのことに集中できる–トピックブランチ
まとめ
• 「入門 Git(Junio C Hamano)」読め