オレ的Vimperator最新リポジトリを追っかけるGitの使い方
いままで git-clone と git-pull しか使ったことが無かったので、そろそろちゃんとGitの使い方を理解したいなーと思い、「Vimperatorの最新版の追っかけ」を題材に手順をまとめてみた。
ローカルに公開リポジトリのクローンを作る
まずは、公開されているリポジトリのクローンをローカルに作る。
以下のようにコマンドを打つ
git clone git://vimperator.org/liberator.git
firewall等でgit:プロトコルが通らない場合はhttp:で
git clone http://git.vimperator.org/liberator.git
本家リポジトリの変更点をローカルに反映する
で、しばらくすると本家のリポジトリ(クローン元)にバグ修正とか機能追加とかがあるので、それをローカルのリポジトリおよび作業ディレクトリに反映することになる。
変更点とかあまり気にしない場合は単純に
git pull
でもいい、でもそうした場合、前回取得した時点からの変更点をさがすのが面倒(日付とかを基準に判断することになる)ので 変更点をひとつづつ確認したい場合は以下ような手順になる。
まず、git-fetchコマンドを実行
git fetch origin
これでクローン元のリポジトリの変更点がローカルのリモート追跡用リポジトリに反映される。
上記の'origin'とはリモート追跡用のリポジトリに付けられた名前。
この名前はgit-remoteコマンドで追加/変更ができるが、リモートのリポジトリをcloneした場合、自動的にクローン元のリポジトリに対して'origin'という名前が付けられる。
念のため、リモート追跡用リポジトリの一覧は以下のコマンドで確認できる。
git remote show
git-fetchコマンドの実行例は以下のような感じ。
$ git fetch origin got 6f249e4f75b84de75b086a2a325ad56e5ad604d0 walk 6f249e4f75b84de75b086a2a325ad56e5ad604d0 got 73e04bde2d3bcffc5cd7b602f766ebc4de5ecdf6 got cf4f6a04c495590500bf6498120224b658fb77a0 : got 46f300121cd359f607e580ba91e42dbd932ce7e0 got 622111689b68c4c0ad286fb0f8478a821cee14bf From http://git.vimperator.org/liberator b4d95ba..6f249e4 master -> origin/master
前回からの変更点を確認する
これで、リモート追跡用リポジトリが最新化された。
ただし、このままの状態ではローカルのリポジトリ自身にはリモートの変更点は反映されていない。
この状態で現在のローカルリポジトリの内容とリモート追跡用リポジトリの内容を比較することで、前回からの変更点確認することができる。
変更の確認にはgit-logコマンドを使う。
git log --stat --summary master..origin/master
上記のコマンドはローカルの'master'ブランチ以降に発生した、リモート追跡用リポジトリ'origin'の'master'ブランチの変更点を出力する。
'master'ブランチとはCVSやSVNで言うところのトランク(trunk)に相当するもの。Gitではトランクとブランチを区別せず、すべてブランチとして扱っていて、リポジトリを作成したときデフォルトで作成されるブランチが'master'ブランチ。
上記コマンドを実行すると以下のような結果が表示される。
上記のようにブランチ名を'A..B'という風に繋ぐと「Aに含まれていないBの変更点」のみを出力することになる。出力例は以下のような感じ。
commit 3803b0b105387fecc52a5b1878bc95699c16e4df Author: Kris Maglione <maglione.k@gmail.com> Date: Mon Jan 12 13:54:10 2009 -0500 Fix b34838e4b6fc54d42eebfcb4f20c26ee8e4db473 common/content/completion.js | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) commit 6c172044ad48ffd0c7deaeb8125204a3df4a8e6a Author: Ted Pavlic <ted@tedpavlic.com> Date: Mon Jan 12 10:47:33 2009 -0500 .gitignore and Makefile cleanup to make build environment friendly (and non-biased) to other editors .gitignore | 25 ++++++++++++++++++++++--- Makefile | 5 ----- common/Makefile.common | 1 - common/Makefile.doc | 1 - 4 files changed, 22 insertions(+), 10 deletions(-) :
出力結果から 3803b0b... というコミットでcompletion.jsの変更、6c17204... というコミットで.gitignoreやMakefile関係の変更があったことが概観できる。
さらに変更点の詳細を見るにはgit-logコマンドのオプションを以下のように変更する。
git log -p master..origin/master
こうするとパッチ形式ですべての変更点が確認できる。出力例は以下のとおり。
t cf4f6a04c495590500bf6498120224b658fb77a0 Author: Kris Maglione <maglione.k@gmail.com> Date: Tue Jan 13 19:23:35 2009 -0500 Fix MOW bug diff --git a/common/content/ui.js b/common/content/ui.js index 8eb7cc3..f526b02 100644 --- a/common/content/ui.js +++ b/common/content/ui.js @@ -1648,7 +1648,7 @@ function CommandLine() //{{{ availableHeight = getBrowser().mPanelContainer ? getBrowser().mPanelContainer.boxObject.height : getBrowser().boxObject.height; if (!outputContainer.collapsed) - availableHeight += outputContainer.height; + availableHeight += parseFloat(outputContainer.height); } catch (e) {} doc.body.style.minWidth = commandlineWidget.scrollWidth + "px";
内容の確認が終わったらローカルのリポジトリにリモート追跡用リポジトリの変更点をマージする。
以下のようにgit-mergeコマンドを叩く。
git merge origin/masger
これで、ローカルのリポジトリ及び作業ディレクトリにクローン元(リモート)のリポジトリの変更内容が反映され最新化される。
次回からは git-fetchからgit-mergeの手順を繰り返す。