subversionに代わる新しいバージョン管理システムということで,gitだ。。
Androidもgitで管理されている。というよりも,Linuxカーネルの管理を目的としてLinus Torvaldsが開発したものだそうだ
たしかにLinuxカーネルの開発では,開発している人たちがLinux Kernel Mailing Listにパッチを投稿して,それをソースに反映させるという開発スタイル。もともと別のバージョン管理システムを使ってたはずなんだけど,なんかの問題でgitを開発したのかな・・・ ということで,Linuxカーネルではスゴイ量のソースコード,変更点の抽出やリポジトリ操作があるんだろうから,性能は折り紙付きかな。
subversionと何が違うのかというと,大きく違うところは分散レポジトリを使えるということらしい。
分散レポジトリってなにかがよくわからないんだが,ファイルを管理しているデータベースの格納先を中央の1箇所ではなく,いろいろな所に持てるということだと思う。
gitでの作業フローは,
になる。
実際のリポジトリへのアクセスには,
Linusは,トランスメタ時代にCVSを使えと言われて,その時にCVSを憎むほど嫌いになったらしい。Subversionに対しては,史上最大の無意味なプロジェクトであると思っているとの事。SubversionがCVSの改良というスタンスで開発された訳が,その理由になっている
# yum install git
でインストールした。
git configコマンドはで,gitの環境設定ファイルを編集する。 gitの環境設定ファイルは,環境に応じ3つの場所に置かれる。
設定ファイルの場所 | 意味 | git configのオプション |
/etc/gitconfig | システム上の全てのユーザとリポジトリ | --system |
~/.gitconfig | 各ユーザ用 | --global |
.git/config | 現在管理中の,Gitリポジトリ | 付けない |
普通は,--globalを使って設定すればいい気がする。
$ git config --global user.name "Yuji Ueno" # ユーザ名 $ git config --global user.email yuji@yeno.homeip.net # メールアドレス $ git config --global color.ui auto # 出力を見やすくする $ git config --list color.ui=auto user.name=Yuji Ueno user.email=yuji@yeno.homeip.net
hogehoheディレクトリ以下をgitで管理する。
$ cd hohehoge $ git init
こうすると,hogehogeディレクトリに「.git」というディレクトリが作られ,このディレクトリがリポジトリになる。*1
この時だと,まだhogehogeにあるファイルはバージョン管理されていない状態。
git statusコマンドでそれが確認できる。トラックしていないファイルって表示される。
$ git add .
でトラックするようにする。addコマンドはいろいろな意味があって,新しいファイルのトラック開始・ファイル衝突時のマージなどのマーク付けなんかで使用するみたいだ。
その後,まだリポジトリに変更を確定してないので,コミットする。コミットされるのは,addコマンドを実行したファイルに対してのみになる。
$ git commit -m "最初のコミット"
これで,コミットされる。 いちいちaddコマンドするのは面倒なこともある。その時には,
$ git commit -a -m "次のコミット"
と-aオプション付きでコミットすると,add処理を自動的にやってくれる。
よくやるのは,commitした後を早まったというか変更するファイルがまだ有った時の要な場合は,
$ git commit -m '最初のコミット' $ git add 忘れてたファイル $ git commit --amend
で,忘れてたファイルを再度commitする時,直近のcommitに上書きのような状態にする。
gitを使った流れは,下記のような感じになる。
$ git status # On branch master nothing to commit (working directory clean)
変更したものがない場合は,statusコマンドを使うと,このような出力が返ってくる。
複数の人で共有するリポジトリがあると便利。
$ mkdir /var/www/git/hogehoge.git $ cd /var/www/git/hogehoge.git $ git init --bare
これで,/var/www/git/hogehoge.gitという共有用リポジトリが出来た。
前に作った個人用レポジトリ設定を共有リポジトリに反映させる。
$ git push /var/www/git/hogehoge.git master
これで,共有リポジトリに登録できたんで,複数人で共同作業が行えるようになった。
コピーを持ってくるには,
$ git clone /var/www/git/hogehoge.git hogehoge.new
とかすればOK。
svnだとcheckoutに似ているんだけど,gitでは,リポジトリサーバーが保持しているデータを全てコピーする。つまり履歴も含んだ全てが,git cloneとすることで手元に持ってこれる。これは,リポジトリサーバーが万が一壊れちゃっても,どこかに残っているcloneしたデータを戻してやれば復元も可能になる。これまでの履歴ももちろん復元される。
このへんが,Subversionとは違うところ。
その後,編集後,例えば,hogehoge.newでfile1.txtを作成後,共有レポジトリに反映させる時には,
$ git commit -a "add file1.txt" $ git push origin master
これで,共有レポジトリにfile1.txtが追加される。
hogehogeディレクトリで,今までの更新を反映させるには,
$ cd hogehoge $ git pull /var/www/git/hogehoge.git
とすると,hogehogeが,hogehoge.newと結果的には同じになる。
これで共同でファイルを編集・更新が出来るようになります。
共有リポジトリがある場合の流れ,
$ git push origin master
新しくコメントをつける