知らないと損をするgit
タイトルはホッテントリメーカーから。
明日のgit勉強会に知識ゼロで行くのはまずいと思って触り始めてみました。
基本知識
かWiki - Git/分散レポジトリって何が嬉しいのがわかりやすかった。
Subversionでいう、svkのことみたい。
インストール
手元にあるCentOS5.2で進めていくことにしてみた。普通にyumを叩いてみる。
$ sudo yum install git Parsing package install arguments Requested dep: git is provided by installed package Nothing to do
予想通り無いですね。じゃ、Dagレポジトリを覗いてみる。
$ sudo yum --enablerepos=dag install git Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Updating: subversion i386 1.5.2-0.1.el5.rf dag 5.4 M Installing for dependencies: git i386 1.5.2.1-1.el5.rf dag 27 M perl-Compress-Zlib i386 1.42-1.fc6 base 52 k perl-DBI i386 1.605-1.el5.rf dag 864 k perl-Error noarch 0.17014-1.el5.rf dag 26 k perl-Git i386 1.5.2.1-1.el5.rf dag 18 k perl-HTML-Parser i386 3.56-1.el5.rf dag 146 k perl-HTML-Tagset noarch 3.20-1.el5.rf dag 14 k perl-Net-Daemon noarch 0.43-1.el5.rf dag 44 k perl-PlRPC noarch 0.2020-1.el5.rf dag 33 k perl-libwww-perl noarch 5.805-1.1.1 base 376 k subversion-perl i386 1.5.2-0.1.el5.rf dag 2.1 M Updating for dependencies: subversion-devel i386 1.5.2-0.1.el5.rf dag 241 k
うお、なんか依存性パッケージがいっぱい。perlのモジュールが必要なのかぁ。
とりあえず全部インストール。Subversionのアップデートもついでに出来たといい方向に考える。
バージョンの確認
$ git --version git version 1.5.2.1
gitの公式ページ見ると、最新版は1.6.0.2らしいけど試せればいいので気にしない。
基本操作
を参考に進めます。
新しくリポジトリ作ってプロジェクト追加するところまで進めてみます。
マニュアル表示
$ man gif-diff
No manual entry for git-diff
・・・見つからないしorz
とりあえず--helpオプションでコマンド一覧は見れた。
git --help
名前とメアドの登録
$ git config --global user.name "Tomohiro MITSUMUNE" $ git config --global user.email "tmitsumune(at)gmail.com"
リポジトリ作成→追加
追加するプロジェクトはsymfonyのsf-sandboxを利用。Download - Symfony
$ wget http://www.symfony-project.org/get/sf_sandbox_1_1.tgz $ tar xzf sf_sandbox_1_1.tgz $ cd sf_sandbox $ git init Initialized empty Git repository in .git/
これで作業ディレクトリの初期化は完了。簡単。.gitディレクトリが作られてます。
$ ls .git
HEAD branches/ config description hooks/ info/ objects/ refs/
スナップショットの取得
$ git add .
確認メッセージは何も出ないらしい。次にコミット。
$ git commit -m "initial import"
Subversionだと1度リポジトリにaddしたファイルはそれ以降commitするだけでOKだったけど
gitは毎回add→commitする必要があるみたい。それを一括で行えるのが-aオプション。*1
$ git commit -a
ブランチ管理
分散バージョン管理システムはこれが売りなんだろうと思う。
ローカルでブランチ切っていって、オレオレバージョンで管理していくイメージ。
ブランチの作成・確認
$ git branch experimental $ git branch experimental * master
experimentalブランチに切り替え
$ git checkout experimental Switched to branch "experimental"
切り替えたブランチにファイル追加
$ echo "test2" > test2.txt $ git add test2.txt $ git commit -a -m "branch test" Created commit 0f8ca38: branch test 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 test2.txt $ ls LICENSE apps/ config/ doc/ log/ symfony* test/ test2.txt README cache/ data/ lib/ plugins/ symfony.bat test1.txt web/
masterブランチに戻ってみる
$ git checkout master Switched to branch "master" $ ls LICENSE README apps/ cache/ config/ data/ doc/ lib/ log/ plugins/ symfony* symfony.bat test/ test1.txt web/
ちゃんとブランチ管理されてます。
masterにexperimentalをマージしてみる
$ git merge experimental Updating 43fd349..0f8ca38 Fast forward test2.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 test2.txt $ ls LICENSE apps/ config/ doc/ log/ symfony* test/ test2.txt README cache/ data/ lib/ plugins/ symfony.bat test1.txt web/
これで両ブランチは同じになりました。
いらなくなったexperimentalブランチを消してみる
$ git branch -d experimental
Deleted branch experimental.
$ git branch
* master
とりあえずここまで。そんなにSubversionと使い勝手は変わらない印象です。
*1:ただし新規ファイルは明示的にaddする必要あり