2007-02-02 曇り,さらに寒い [長年日記]
_1 もっと寒い
昨日より一段と冷え込んだ.行きはまだマシだったが帰りはもっと寒い.あまりの寒さにバスの中でニット帽かぶるくらい.坊主にするタイミング間違えたかな.凹.
_2 A tutorial introduction to git
Gitを使ってパッチの管理をできるようになれば,より開発版のカーネルソース が参照,編集しやすくなるはず.まずは,このチュートリアルから始めてみる.
git以外にもさまざまなインターフェースが用意されている.以下の3つを使って 一通りチュートリアルを行い,一番使いやすいものを使っていくことにする.
_3 gitチュートリアル git 版
git config
$ git config --global user.name "Your Name Comes Here" $ git config --global user.email you@yourdomain.example.com
は1.4.4.4では使えない.HEADだけ?
■[Linux] git チュートリアル 03:26 - エンジニアきまぐれTips を参考に手で~/.gitconfigを作成
% cat ~/.gitconfig [user] name = MUNEDA Takahiro email = muneda.takahiro@example.com
git init
$ git init
は1.4.4.4では使えない.これまたHEADだけ?代わりに以下のコマンドを使う.
% git init-db defaulting to local storage area
カレントディレクトリ配下に .git ディレクトリが作成される.その下は以下の ようになっている.
% ls -lR .git .git: 合計 12 -rw-r--r-- 1 muneda users 23 2007-02-01 11:52 HEAD -rw-r--r-- 1 muneda users 53 2007-02-01 11:52 config -rw-r--r-- 1 muneda users 58 2007-02-01 11:52 description drwxr-xr-x 2 muneda users 296 2007-02-01 11:52 hooks/ drwxr-xr-x 2 muneda users 72 2007-02-01 11:52 info/ drwxr-xr-x 4 muneda users 96 2007-02-01 11:52 objects/ drwxr-xr-x 4 muneda users 96 2007-02-01 11:52 refs/ .git/hooks: 合計 36 -rw-r--r-- 1 muneda users 441 2007-02-01 11:52 applypatch-msg -rw-r--r-- 1 muneda users 588 2007-02-01 11:52 commit-msg -rw-r--r-- 1 muneda users 152 2007-02-01 11:52 post-commit -rw-r--r-- 1 muneda users 207 2007-02-01 11:52 post-update -rw-r--r-- 1 muneda users 388 2007-02-01 11:52 pre-applypatch -rw-r--r-- 1 muneda users 1696 2007-02-01 11:52 pre-commit -rw-r--r-- 1 muneda users 4262 2007-02-01 11:52 pre-rebase -rw-r--r-- 1 muneda users 2555 2007-02-01 11:52 update .git/info: 合計 4 -rw-r--r-- 1 muneda users 240 2007-02-01 11:52 exclude .git/objects: 合計 0 drwxr-xr-x 2 muneda users 48 2007-02-01 11:52 info/ drwxr-xr-x 2 muneda users 48 2007-02-01 11:52 pack/ .git/objects/info: 合計 0 .git/objects/pack: 合計 0 .git/refs: 合計 0 drwxr-xr-x 2 muneda users 48 2007-02-01 11:52 heads/ drwxr-xr-x 2 muneda users 48 2007-02-01 11:52 tags/ .git/refs/heads: 合計 0 .git/refs/tags: 合計 0
git add
$ git add .
指定したディレクトリ配下のファイルをgitのdbに登録する様子. 差分は git init-db 実行後との差分は以下のとおり.
.git/objects: +drwxr-xr-x 2 muneda users 160 2007-02-01 13:39 02/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 0c/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 10/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 13/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 1d/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 1f/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 31/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 37/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 38/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 4d/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 5b/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 63/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 64/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 70/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 75/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 8a/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 96/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 99/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 9a/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 b5/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 b6/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 ce/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 d4/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 e3/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 e6/ +drwxr-xr-x 2 muneda users 104 2007-02-01 13:39 f8/
git commit
$ git commit
.git/COMMIT_EDITMSG # Please enter the commit message for your changes. # (Comment lines starting with '#' will not be included) # # Initial commit # # Updated but not checked in: # (will commit) # # new file: hoge.txt # new file: ..... # new file: fuga.txt #
何も入力せずにエディタを終了させたところ
% git commit * no commit message? aborting commit.
と言われた. ./git 配下にも変化なし.
git test
を追記したところ
% git commit Committing initial tree 0f0acc1bcbf9ed9f031a0300fe04eb113331397e
となり,commitが成功した模様.
git diff
$ git diff
diff --git a/hoge.txt b/hoge.txt index 635003c..6158856 100755 --- a/hoge.txt +++ b/hoge.txt @@ -1,5 +1,5 @@ #!/bin/bash - +# # # #
git add, commit
% git add hoge.txt % git commit # Changed but not updated: # (use git-update-index to mark for commit) # # modified: hoge.txt # nothing to commit
チュートリアルは新規追加ファイルを例にしているのか.同じようにはいかない. とりあえずhoge.txtの差分を元に戻す.
% nano hoge.txt % git update-index % git add hoge.txt % git commit
指定どおり git update-index(git-update-index)を実行してみたが,変わらず.
% git commit # Changed but not updated: # (use git-update-index to mark for commit) # # modified: hoge.txt # nothing to commit
でもgit diffでは見えるんだが….よくわからんのでいったん全部やりなおし.
% git init-db % git add . % git commit
新しいファイルを作成してみる.
% nano git-test.txt % cat git-test.txt This file is to test making changes with git.
% git diff
この時点では何も表示されなかった.(差分なし)
% git add git-test.txt
ちなみに,この時点git diffしても何も表示されなかった.(差分なし)
% git commit # Please enter the commit message for your changes. # (Comment lines starting with '#' will not be included) # Updated but not checked in: # (will commit) # # new file: git-test.txt #
と表示され,追加したファイルが無事認識されている.
% git log commit 405dba7bf58aecf55e3ec0ec3865f5a7c269bb95 Author: MUNEDA Takahiro <muneda.takahiro@example.com> Date: Thu Feb 1 15:02:25 2007 +0900 add git-test.txt
commit b3aac2edd441ec7dd0eea435499064b674bd1d54 Author: MUNEDA Takahiro <muneda.takahiro@example.com> Date: Thu Feb 1 15:01:18 2007 +0900 initial commit
ちゃんとcommitされている.
既存のファイルを変更する場合について再チャレンジ.
% nano hoge.txt % git diff ← (1) % git update-index hoge.txt ★ % git diff ← (2) % git commit % git log
既存のファイルを編集する場合,★の行が必要で,git add は不要.また(1)の 時点ではgit diffに差分が表示されるが,(2)の時点ではgit diffに差分が表示 されない.
大量のファイルを編集した場合★での作業が多いので面倒.update-indexし忘れ ることが多々発生しそうだ.
git commit -a
% nano hoge.txt % git commit -a
とするとcommit messagesの編集画面となった.つまり上で書いたgit add, commitで一番大変そうだった'git update-index'をする必要がなくなる.よって こちらのほうが便利.
% nano hoge.txt % git update-index hoge.txt % git commit
_4 gitチュートリアル メモ cogito 版
git config
$ git config --global user.name "Your Name Comes Here" $ git config --global user.email you@yourdomain.example.com
はgitと同じくcogito-0.18.2では使えない.
■[Linux] git チュートリアル 03:26 - エンジニアきまぐれTips を参考に手で~/.gitconfigを作成
% cat ~/.gitconfig [user] name = MUNEDA Takahiro email = muneda.takahiro@example.com
git init
% cg-init defaulting to local storage area Adding file ファイル名 ..... Adding file ファイル名
が表示されたあと自動的にファイルの編集画面となる. ($EDITORで指定されたエディタで開かれるのかな)
Initial commit CG: ----------------------------------------------------------------------- CG: Lines beginning with the CG: prefix are removed automatically. CG: CG: Author: MUNEDA Takahiro CG: Email: muneda.takahiro@example.com CG: CG: If you want to abort the commit, just quit without saving this file. CG: ----------------------------------------------------------------------- CG: vim: textwidth=75
何も記述せずに保存し,エディタを終了させると
Log message unchanged or not specified Abort or commit? [ac]
と出たのでとりあえずabort.
Abort or commit? [ac] a Commit message not modified, commit aborted cg-init: Initial commit aborted
特にファイルが作られたなどの形跡はない.
同じく何も記述せずに commit とすると
Abort or commit? [ac] c Committing initial tree 9cedec295786f4f07492e22f4044d088b3b60fa5 Committed as 51046be46625444052bf594f9333719953e39e17 cg-init: Note that some files were not added due to the default ignore rules. cg-init: You can list them by invoking 'cg-status -x'.
と表示されカレントディレクトリ配下に .git ディレクトリが作成される.その 下は以下のようになっている.
% ls -lR .git .git: 合計 16 -rw-r--r-- 1 muneda users 23 2007-02-01 12:04 HEAD -rw-r--r-- 1 muneda users 53 2007-02-01 12:04 config -rw-r--r-- 1 muneda users 58 2007-02-01 12:04 description drwxr-xr-x 2 muneda users 296 2007-02-01 12:04 hooks/ -rw-r--r-- 1 muneda users 1346 2007-02-01 12:05 index drwxr-xr-x 2 muneda users 72 2007-02-01 12:04 info/ drwxr-xr-x 19 muneda users 456 2007-02-01 12:05 objects/ drwxr-xr-x 4 muneda users 96 2007-02-01 12:04 refs/ .git/hooks: 合計 36 -rw-r--r-- 1 muneda users 441 2007-02-01 12:04 applypatch-msg -rw-r--r-- 1 muneda users 588 2007-02-01 12:04 commit-msg -rw-r--r-- 1 muneda users 152 2007-02-01 12:04 post-commit -rw-r--r-- 1 muneda users 207 2007-02-01 12:04 post-update -rw-r--r-- 1 muneda users 388 2007-02-01 12:04 pre-applypatch -rw-r--r-- 1 muneda users 1696 2007-02-01 12:04 pre-commit -rw-r--r-- 1 muneda users 4262 2007-02-01 12:04 pre-rebase -rw-r--r-- 1 muneda users 2555 2007-02-01 12:04 update .git/info: 合計 4 -rw-r--r-- 1 muneda users 240 2007-02-01 12:04 exclude .git/objects: 合計 0 drwxr-xr-x 2 muneda users 160 2007-02-01 12:04 02/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 1d/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 1f/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 4d/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:05 51/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 63/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 64/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 70/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 8a/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 96/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:05 9c/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 b5/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 d4/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:05 f7/ drwxr-xr-x 2 muneda users 104 2007-02-01 12:04 f8/ drwxr-xr-x 2 muneda users 48 2007-02-01 12:04 info/ drwxr-xr-x 2 muneda users 48 2007-02-01 12:04 pack/ .git/objects/02: 合計 8 -r--r--r-- 1 muneda users 832 2007-02-01 12:04 9fc2a489d1898b720048d577a1de59f8664920 -r--r--r-- 1 muneda users 805 2007-02-01 12:04 a757bbf4488740a72966bb1f7f2694581bd04d .git/objects/1d: 合計 4 -r--r--r-- 1 muneda users 129 2007-02-01 12:04 2a05ad38a86f42aa28a4f8043a588dea7041d5 .git/objects/1f: 合計 4 -r--r--r-- 1 muneda users 1595 2007-02-01 12:04 ca8da4b740e166b93e28aaadd276577a415ea7 .git/objects/4d: 合計 4 -r--r--r-- 1 muneda users 290 2007-02-01 12:04 7c7b58c890c215f2f133e732508173b3ef72bf .git/objects/51: 合計 4 -r--r--r-- 1 muneda users 145 2007-02-01 12:05 046be46625444052bf594f9333719953e39e17 .git/objects/63: 合計 4 -r--r--r-- 1 muneda users 1511 2007-02-01 12:04 5003c6d2e8a6e9c11c47d5ade6bcfac6c4c2fd .git/objects/64: 合計 4 -r--r--r-- 1 muneda users 242 2007-02-01 12:04 b714f3cf0545bcc9d28bbe7ccf9f114dec2e03 .git/objects/70: 合計 4 -r--r--r-- 1 muneda users 152 2007-02-01 12:04 11893bd7147d765162195ecd9642416928df9e .git/objects/8a: 合計 4 -r--r--r-- 1 muneda users 1258 2007-02-01 12:04 0f7e10c4f9243ca7ac067e5c15c930fd2eb5f0 .git/objects/96: 合計 4 -r--r--r-- 1 muneda users 936 2007-02-01 12:04 5c1fa07ac7428ded327ff090a58d9b61c51f14 .git/objects/9c: 合計 4 -r--r--r-- 1 muneda users 274 2007-02-01 12:05 edec295786f4f07492e22f4044d088b3b60fa5 .git/objects/b5: 合計 4 -r--r--r-- 1 muneda users 798 2007-02-01 12:04 9f71d617ab5a1bc759db82f256384bd2e52112 .git/objects/d4: 合計 4 -r--r--r-- 1 muneda users 256 2007-02-01 12:04 1f3fd3d0fa26f442b0840a3d3fe28974801c8e .git/objects/f7: 合計 4 -r--r--r-- 1 muneda users 329 2007-02-01 12:05 ebfd8813ab477664a7d6923d3593c9690eba92 .git/objects/f8: 合計 4 -r--r--r-- 1 muneda users 220 2007-02-01 12:04 e2c3c3b8b5d787f70682243d787e8a5011d498 .git/objects/info: 合計 0 .git/objects/pack: 合計 0 .git/refs: 合計 0 drwxr-xr-x 2 muneda users 72 2007-02-01 12:05 heads/ drwxr-xr-x 2 muneda users 48 2007-02-01 12:04 tags/ .git/refs/heads: 合計 4 -rw-r--r-- 1 muneda users 41 2007-02-01 12:05 master .git/refs/tags: 合計 0
git init-db をしたときよりも全然多い.(git init-db + add + commit と同じ)
% cg-status Heads: >master 51046be46625444052bf594f9333719953e39e17
とすると先ほどのcommit
Committed as 51046be46625444052bf594f9333719953e39e17
が master と呼ばれるものになっていることがわかる.
git と cogito との差分
% git init-db % git add % git commit
が
% cg-init
だけで行える.cogitoが大変便利.
追記
% echo $EDITOR nano % EDITOR='emacs -nw' % echo $EDITOR emacs -nw
としてcommitをしたところemacsでCOMMIT_EDITMSGを編集する画面となった.や はりEDITOR環境変数を見ている.
git diff
$ cg-diff diff --git a/hoge.txt b/hoge.txt index 635003c..6158856 100755 --- a/hoge.txt +++ b/hoge.txt @@ -1,5 +1,5 @@ #!/bin/bash - +# # # #
gitとまったく同じ.
git add,commit
% nano hoge.txt % cg-add hoge.txt Adding file hoge.txt % cg-commit Committed as 01828c69448447ea28dac991faad355fc304c6dd
無事変更分が反映された.
% cg-log Commit: 01828c69448447ea28dac991faad355fc304c6dd Author: MUNEDA Takahiro <muneda.takahiro@example.com> Thu, 01 Feb 2007 14:45: 44 +0900 add # in hoge.txt
Commit: 51046be46625444052bf594f9333719953e39e17 Author: MUNEDA Takahiro <muneda.takahiro@example.com> Thu, 01 Feb 2007 12:05: 03 +0900 Initial commit
git commit -a
% nano hoge.txt % cg-commit -a cg-commit: unrecognized option -a
となり,commitサブコマンドには-aオプションが用意されておらず失敗する.
% nano hoge.txt % cg-commit
で'git commit -a'と同等の処理をするため,わざわざ'commit -a'を指定しなく てもよいためだと思われる.
_5 git チュートリアル メモ git.el版
git config
git, cogitoと同様configは存在しない.ま,それらのelインターフェイスだか ら当然か.
git init,add, commit
initは存在しない.gitもしくはcogitoで行う必要がある.
git status
git.elはすべてgit-statusバッファが基本.すべてのコマンドはこのバッファ上 で行う.
M-x git-status
とするとミニバッファに
Select directory:
と表示されるので,git initしたディレクトリを指定する.
Directory: ~/me/git-test/git-el/ Branch: master Head: ec7431434b No changes.
のように,現在参照しているgitツリーが表示されている.なお,git initした ときに必要なさそうだとGitが判断したファイルの相対パス,ファイルの状態が
Unknown filename Unknown .... Unknown filename
のように表示される.手元で確認したところ,quilt関係のファイルがこれに該 当する模様.
Unknown .pc/.version Unknown .pc/applied-patches Unknown .pc/hoge.patch/.timestamp Unknown patches/hoge.patch~
ファイル名の末尾に~がついているファイルが見えるがこれはEmacsが作成するバッ クアップファイルではない.詳細は未確認だが,git.elで作業をしていると Emacsのバックアップファイルが作成されない.
なお,git initをしていないとミニバッファに
cannot find top-level git tree for ~/me/git-test/.
と表示される.
git-status上で'?'を押すとバッファが分割され,他方にgit-statusで利用でき るコマンド一覧が表示されるので参考にするとよい.
git diff, commit
gitツリーに登録されているファイルを編集し,
M-x git-status
を実行する.すると
Directory: ~/me/git-test/git-el/ Branch: master Head: f842d43580 Modified hello.txt
となり,編集したファイルが認識できる.*git-status*バッファで
= (または d =)
を押すとバッファが分割され,git diff, cg-diffをした結果と同じものが
- git-diff*バッファに表示される.
編集内容が正しければ,*git-status*バッファで
c
を押すとバッファが分割され,*git-commit*バッファが表示される.
Author: MUNEDA Takahiro <muneda.takahiro@example.com> --- log message follows this line --- □
カーソル位置は'□'位置にある.このときミニバッファには
Press C-c C-c when you are done editing.
と表示される.commit時のコメントを入力し終わったら
\C-C \C-c
を押す.するとミニバッファに
Committed 45f2422d8c9d2708d178141e2f3a99fd1bf2b770.
と表示され,*git-status*バッファが自動的に更新される.
Directory: ~/me/git-test/git-el/ Branch: master Head: 45f2422d8c Uptodate hello.txt
これでcommit完了.