Vine Linux 4.2 に git のパッケージがあったので、使ってみました。
下記の手順の中で、別の場所に新しいディレクトリをまったく作らないで作業ができている、というところが、CVS や Subversion と異なる点(手軽さという意味で大きなメリット)だと思います。
インストール(Ubuntu でも同様)
$ ssh yellow $ sudo apt-get update $ sudo apt-get install git-core
- Vine 3.x には git-core パッケージはないみたいです
個人のデフォルトを設定する
git config --global user.email "nishimoto@m.ieice.org" git config --global user.name "Takuya Nishimoto"
- ~/.gitconfig に書き込まれるようです
既存のディレクトリをバージョン管理下におく。ここでは職場で使っている bibdb という自前ツールの例。
$ cd /export/htdocs/html/bibdb/ $ git init
- カレントディレクトリに .git ディレクトリが作成され、これがレポジトリになる
管理したいファイルを追加する
$ git add *.php *.txt $ git add cgi-bin/update_publication.cgi $ git add *.jpg *.gif .htaccess
追跡されているファイルとされていないファイルを確認する
$ git status
commit する
$ git commit -m "first commit"
- これにより、追跡されているファイルが .git 内に保存され、比較・復元が可能になる
編集してみる
$ emacs -nw 00readme.txt
差分を確認
$ git diff diff --git a/00readme.txt b/00readme.txt index ff26fee..c15f626 100644 --- a/00readme.txt +++ b/00readme.txt @@ -4,3 +4,7 @@ TODO: <A5><A2><A5><C3><A5><D7><A5><ED><A1><BC><A5><C9><A4><B5><A4><EC><A4><BF>pdf<A4><F2>chmod 644<A4><B9><A4> + +2009-03-06 by nishimoto + + $ git init
- TODO: 文字化けの解決
- 環境変数 GIT_PAGER を使うのかな?
差分を commit する
$ git commit --all -m "readme updated" [master]: created b5f0737: "readme updated" 1 files changed, 4 insertions(+), 0 deletions(-)
履歴を確認する
$ git log commit b5f073788c35befd95f5a907777c221f17e63d1e Author: Takuya Nishimoto <nishimoto@m.ieice.org> Date: Fri Mar 6 17:01:05 2009 +0900 readme updated commit 42dff939ec85d2faa212ba42ff617f5fdac215e6 Author: Takuya Nishimoto <nishimoto@m.ieice.org> Date: Fri Mar 6 16:42:51 2009 +0900 first commit
ブランチを確認する
$ git branch * master
ブランチを作る
$ git branch experiment $ git branch experiment * master
別のブランチで作業してみる
$ git checkout experiment Switched to branch "experiment"
$ emacs -nw 00readme.txt $ git diff diff --git a/00readme.txt b/00readme.txt index c15f626..be17e40 100644 --- a/00readme.txt +++ b/00readme.txt @@ -8,3 +8,8 @@ TODO: 2009-03-06 by nishimoto $ git init + +2009-03-06 by nishimoto + + git branch : experiment +
experiment ブランチに commit する
$ git commit --all -m "00readme modified" [experiment]: created 609c427: "00readme modified" 1 files changed, 5 insertions(+), 0 deletions(-)
master ブランチに戻す
$ git checkout master Switched to branch "master" $ cat 00readme.txt [yellow] /home/httpd/html/bibdb/ TODO: アップロードされたpdfをchmod 644する 2009-03-06 by nishimoto $ git init
experiment の更新を master にマージする
$ git merge experiment Updating b5f0737..609c427 Fast forward 00readme.txt | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
マージできたことを確認する
$ git branch experiment * master $ cat 00readme.txt
[yellow] /home/httpd/html/bibdb/ TODO: アップロードされたpdfをchmod 644する 2009-03-06 by nishimoto $ git init 2009-03-06 by nishimoto git branch : experiment
リンク
- 同じ分散バージョン管理である Mercurial の考察 http://d.hatena.ne.jp/nishimotz/20080415/1208274759
- 分散バージョン管理の意義 http://d.hatena.ne.jp/nishimotz/20080429/1209480787
- ブランチの使用例 http://www.ideaxidea.com/archives/2008/04/git.html
- git の概要 http://sourceforge.jp/magazine/09/02/05/080213
- かなり昔に nishimoto が書いた CVS の紹介 http://radiofly.to/nishi/cvs/
更新記録
- 2009-03-10 : 事前に git config で user.name などを指定するようにしました。