入門 git 入門
Git ユーザマニュアル (バージョン 1.5.3 以降用) を読んで、全体を把握するのは少しきついので、全体像を把握したくて、入門git を購入。
技術系の入門書は、いかに概念がわかりやすく書かれているかが重要だと思うが、概念的な説明、基本的なチュートリアルという意味で、本書は入門書としてはわかりやすい良書だと思う。
で、そんなわかりやすい、入門git のチュートリアルのさらに要点を以下にメモ。
分散バージョン管理システム(DVCS : Distributed Version Control System)
リポジトリ
Git は従来の集中型 バージョン管理システム(VCS : Version Contorol System) とは、異なり、分散型だといわれるが、では具体的に何が分散なのか?と考えていたが、リポジトリが分散しているということらしい。
分散しているといっても、ユーザーが断片を所持しているのではなくて、プロジェクトのすべての履歴を保持したリポジトリをユーザーが、各自で持つという意味で分散。
作業ツリー
様々なファイルに変更を加える場所が、作業ツリー。
集中型では、”あちら側” のサーバーにあり、分散型(Git)では、”こちら側” の自分のコンピュータ にある。
Git の使い方
Git のセットアップ
Cygwin を使うのではなく、Windows ネイティブへGitを移植した Git on MSys もある
Git を使う
大まかな使い方の全体像は、以下のような感じか。
自分の認識を図にしただけなので、間違ってたらごめんなさい。
この全体像を元に、具体的な手順を以下にまとめ。チュートリアルを追った詳細はこちら
リポジトリの作成 (git init)
- リポジトリと作業ツリーはどちらも.git ディレクトリに存在
- リポジトリを作るには、まずプロジェクトコードを格納したい場所を決め(例として、mysite とする)、git init とする
$ mkdir mysite $ cd mysite $ git init
リポジトリへの追加(git add)
- 例えば、ファイル(index.html) を リポジトリへ追加するには、git add ファイル名とする
$ git add index.html
コミット(git commit)
- コミットは、リポジトリに格納される1つ1つの履歴
- コミットでは、ユーザー名、メールアドレス、コミットメッセージが格納される
$ git commit -m "add in hello world HTML"
コミットの確認(git log)
- コミットの確認
- 先頭行はコミット名、SHA-1のハッシュ値によりユニークに識別
$ git log commit 6b4f2e70a4e1950083000148ec8b625be8a86eee Author: YAGI HirotoDate: Mon Dec 6 22:10:38 2010 +0900 add in hello world HTML
作業ツリーを Git がどう認識しているかを確認 (git status)
- 作業ツリーをGitがどう認識しているか確認する
- index.html を編集し、git status を行うと、Changed but not updated (変更されているが更新されていない) に分類される
$ git status # On branch master # Changed but not updated: # (use "git add..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: index.html # no changes added to commit (use "git add" and/or "git commit -a")
変更をステージ(再度 git add)する
- ステージングエリアは、作業ツリーとリポジトリの間にあるバッファ。リポジトリにコミットしたい変更だけをアレンジ。
- Change to be commitd (コミットされる変更)に状態が変わる
$ git add index.html $ git status # On branch master # Changes to be committed: # (use "git reset HEAD..." to unstage) # # modified: index.html #
ブランチを作る git branch
- git branch [作りたいブランチの名前] [分岐元にしたいブランチの名前]
- master は Gitでのデフォルトブランチ名
$ git branch RB_1.0 master
ブランチを切り替える(git checkout)
$ git checkout RB_1.0
タグを打つ(git tag)
- git [タグ名] [タグを打つポイント]
$ git tag 1.0 RB_1.0
- タグの一覧
$ git tag
リベース(git rebase)
例えば、ブランチを切って、以下のような状況、「現時点で、ブランチが2つあり、それぞれが関知していないコミットを持っている。RB_1.0(リリース1.0) に変更がなされたことを、master ブランチ(リリース2.0向けの作業)にも知らせる必要がある。」になった場合、ランチから変更を取り出してきて、別のブランチの先頭で再生するのがリベース(rebase)
この状態をリベースすることで、
この状態にする
先ずは、ブランチを切り替えて master ブランチに戻る
$ git checkout master Switched to branch 'master'
rebase コマンドの実行
git rebase RB_1.0 Current branch master is up to date.
ブランチの削除 (git branch -d)
タグをつけたブランチを削除しても、タグを指定してブランチを作成できるため問題ない
$ git branch -d RB_1.0
タグからブランチを作る (git branch)
- タグ 1.0 から、 RB_1.0.1 をブランチ
$ git branch RB_1.0.1 1.0
アーカイブを作成(tar)
$ git archive --format=tar --prefix=mysite-1.0/ 1.0 | gzip > mysite-1.0.tar.gz $ ls index.html mysite-1.0.tar.gz
パラメータ | 内容 |
–format=tar | tarを出力することを伝えている |
–prefix=mysite-1.0/ | 全体をmysite-1.0/ ディレクトリ以下に置くように指定 |
1.0 | 使用するタグを指定している |
アーカイブを作成(zip)
$ git archive --format=zip --prefix=mysite-1.0/ 1.0 > mysite-1.0.zip $ ls index.html mysite-1.0.zip
リモートリポジトリのクローンを作る(git clone)
- リモートリポジトリで作業を始めるためには、git clone でクローンを作成する
- クローンとは、作業を始めるリポジトリの完全なコピー
以下のプロトコル
プロトコル | 書式 | 特徴 |
SSH |
ssh://[user]@[server][リポジトリのパス] |
|
git |
git://[server][リポジトリ] |
|
HTTP/HTTPS |
http://[server][リポジトリのパス] |
|
別クライアントからアクセスし、クローンを作成する例
git clone ssh://piroto@192.168.24.53/home/piroto/git_test/mysite
以上。
追記
Git Clohe ssh で ポートを指定するには、ssh://[user]@[server:port][リポジトリのパス] でよい。