観察日記 2010-05-17

今回は卜部さんの backport 用スクリプトや git の話題がメインです。ので、コミッタではない人にはおもしろくないかもしれません。

backport 用スクリプト

なるせたんなるせたん
はいはいはい
どうせスクリプトでbackportするなら、俺みたいに元ネタのリビジョン番号をcommit logに入れようぜ
たしかに
ていうか、誰かにrevision入れろよボケといった記憶すらある
俺だろ
今日はブーメランが多いな
俺のスクリプト貼っときますね。 http://coderepos.org/share/browser/docs/shyouhei/ruby%20development/merger.rb
おお、長い
160行で長いってRuby脳だな
version.h弄ってtag打つとこまでやるから長いんだよなあ。
ぼくにもつかえるかしら
ソースコードのディレクトリに移動して ruby merger.rb NNNN とかやると
最後にOK?って聞いてくるところでabortしないとコミットされちゃうけどね
まあ、使うとしたら手を入れることは間違いないが
俺はタグも打たないしversion.hも明示的には変更しないしな。
あ、svnコマンドにパスが通ってないと動かないかも。
それはさすがに通っている
なにかマージしたいな
require 'svn/client'するように書きなおすべきだな、どうせなら。
このマシンはいってたかな
それをやられるとむしろ試用が困難に
ああ重要なことをいうのを忘れていたが、さっきのスクリプトはたぶん1.8では動かない
そんな古いバージョンにはパスを通してない
そもそも/bin/rubyになっていた
とかやっぱ色々思い込みがあるな。
他人に使ってもらえるクオリティには至っていなかった
とりあえず usage を書こうと思った
デフォルトのパスはどうするかな
書かないという選択
パス?
パスというかshebang
#!/bin/sh\nexec ruby -x "$@"\n#!ruby
"$0"が抜けたな
うちではパスに入ってる ruby は 1.8.7 なんだな
とりあえずさっきのスクリプトにきわめていいかげんなヘルプをつけてみたぜ

もっぱらコミッタ向けの話題ですが、まぁ内輪日記なので。

git blame って速い?

そういえば、git blameって速い?
svn よりはたぶん
具体的にはrubyChangeLogだとどれくらいかかる?
それはかかりそうだ
実用性がないくらいかかるならどうでもいいや。
実用性がないくらいかかる
-Lオプションとやらを使うとマシになるのかな。
おお、
つまり、ChangeLogからリビジョンを知る手っ取り早い方法ねーかなー、と。
やっぱり遅いですね
がく
git blame -L 1000,1010 ChangeLog で 10 秒
0,10 なら一瞬
でもまあ10秒なら我慢の範囲か。
...
単に新しいコミットから探していくのだろう
そういうことかー
いまいちだな。
何のために欲しいのですか
この変更の差分を見たい
とか普通にないですか。
git show rev
いや、俺git使ってないし。
うん
手が滑った
神がリビジョン番号を教えてくれる
これで何が得られるのかよくわからん。
diff 的なもの
ChangeLogの651行目のリビジョン番号が知りたい!
は、どのように解決される?
blame ですかねえ
あんまりそんな用途を思いつかない
git show revはなんなんだ!
ChangeLog ではなく git log を見る
git log ならリビジョン番号が書いてある
えーと
みたいリビジョン番号を見つけたら git show rev
見つけた後はどうにでもなるので、見つける方法を...
git logは死ぬほど速いからChangeLog見ないでそっちを見ればおk
かしら
いやしかしなんか地獄を見そうな気もするな。
{mame} $ time git log > /dev/null
{mame} real 0m0.677s
くらいには速い
最新から New repository initialized by cvs2svn. までログ
そりゃ速いな。
問題は結果が数万行に及んでしまうことくらいだな。
まあ、lessなりなんなりに渡せばいいだけだが。
いや自動的に渡されるんだっけ?
指定したファイルに関するコミットだけのログとかも
git log file で見えるから便利
なんか自動的に渡されますね
最初はなんとなく嫌だったけど今ではないと困る > 自動 less
じゃあ最初からそっちだけ見りゃいいのか。
俺の中のgitの評価点が+1された
現在の合計評価点は-389店

移行するまであと2年くらいは必要だな。
git log -pでChangeLogの文言で検索してるな
だいたいそれでなんとかなってる

git svn fetch && git svn rebase

git svn fetch && git svn rebase が
git pull 並に簡単にならないのは事情があるん?
git pull --rebase
それでできるの?
configいじればpullをrebaseにもできた気がする
うむ
って、svnがついてた
できなかった
それはできなかった気がする
理由は単にgit-svnの作者のユースケースに入ってないからではあるまいか
なんで入らないのかなあ
pull 的なことをしないのかな
git pullはgit fetch + git mergeねってのは大丈夫かな
大丈夫じゃなかった
git pullってのはしゅがーしんたっくす(?)で
git fetch && git mergeのこと
なるほど
git svn pull があればいいのに
git pull --rebaseはgit fetch && git rebase
なので、git svn pullはおかしい
git svn pull --rebase ?
git svn merge が存在しないかな
でで、git svn rebaseはgit svn fetch --parent && git rebaseだったかな
git svn pull --rebaseですな
ででで、git svn rebase --fetch-allかも
git svn rebase --fetch-allだな、前からあったっけこれ
おお
git svn rebase --all でもよさそう?
なんかそれでも動いてる気がする
次にやってみよう

ちなみに最近は .gitconfig に、以下のように書いて git up ってやってます。git リポジトリで git svn rebase とか誤爆しなくて便利。

[alias]
up = "!sh -c 'if [ -d .git/svn ]; then git svn rebase -v --all; else git fetch -v --all; fi' _"

github に持っていった git-svn リポジトリで author 識別

そういえば、githubのAccount SettingsのEmail Addressesで、
naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080eとか追加するとruby/rubyでのコミットが関連付けられることに気づいた
それはEmailなのかという疑問が。
とりあえず追加してみた。
その GUID 的なものは一体なんだろう・・・
リポジトリ+アカウントのハッシュかねぇ
git-svn が生成してるのかー
svn側のUUIDでは。
svn info http://svn.ruby-lang.org/repos/ruby で出てくる。>リポジトリ UUID: b2dd03c8-39d4-4d8f-98ff-823fe69b080e
ふむ
リポジトリだけか
svn info をよく見たらみんなおんなじだった
svnadmin createしたときに生成されるんだったような。
svnadmin load するときにUUIDが違っててコミットが存在するとデフォルトでは拒否される。
なるほどー
それ以外ではどこで使われてるのかよく知らないけど、svn switch --relocateのときにチェックしてるかも。

Linus 先生の git 講座@kosaki さんち

http://mkosaki.blog46.fc2.com/blog-entry-1104.html
有益だと思ったので紹介