トップ «前の日記(08/05/2010) 最新 次の日記(08/12/2010)» 編集

本 日 の h o g e

hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。

更新情報の取得には rdflirs を使ってもらえると嬉しいです.


08/06/2010 ふむ [長年日記]

tDiary 2843日目

[日記] ふむ

最近 git をちょくちょく使っているのだけれど,git の何が便利なのかがまだイマイチよく分からん... 正直今のところ git って github がなかったら流行ってなくね? というイメージ.

まあ,cvs や svn と同じような使い方しかしてないから便利さが分からないだけなんだと思うけど. cvs や svn に慣れた身では commit なんてそう易々と実行しないので,commit と push が大体同じタイミングになって単にめんどくせーだけになってしまっている.

ただ,今日はいつもと違ってネットワークをよく切ったり張ったりする環境で使ったのだけれど,こういう環境ではアリかなとは思う.

けどそれだけでそんな大絶賛するほどのことかという気もするので, もっと何か便利なことがあるんだろう,多分.

とか言ってたら

思いっきりハマったのでメモ.

git log 見たらコミッタの名前とかアドレスとかがおかしなことになってた (何も設定してなかったら,マシンのユーザ名とマシン名になるっぽい) ので,どうにかして直せないかなーと思って調べてみたところ,filter-branch なんてのがあることを知る.

こちらの記事 などを参考に,

$ git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "atzm" ]; then
    GIT_AUTHOR_NAME="atzm"
    GIT_AUTHOR_EMAIL="atzm@xxx"
    GIT_COMMITTER_NAME="atzm"
    GIT_COMMITTER_EMAIL="atzm@xxx"
fi
git commit-tree "$@"
'

とかやってから git push してみたら,リモートから reject された.

なんじゃそら,と思いながら pull → push したら,修正されたコミットログと修正前のコミットログとで,コミットログが 2 重になるという珍事.うわーマージしちゃったよ! しかも push までしちゃったよ!

こりゃいかん,と思って,まず元に戻す方法を模索. すると reflogreset などというものがあることを知る. reflog で戻したいポイントを探して,

$ git reset --hard HEAD~2

とかやったら (ローカルは) 元に戻った.やれやれ.

しかし本題はログの改竄であって,そんなことではない.

filter-branch 結果をマージせずにリモートに送りつけるには... と思って調べてみると,どうも receive.denyNonFastForwards なるものが効いているから reject されてるくさいことを知る.

というわけで,リモート側で

$ git config receive.denyNonFastForwards false

で一時的に無効化した後,先ほど filter-branch で修正したローカルの上で

$ git push -f

これで世は事もなし. もちろん事が済んだ後は receive.denyNonFastForwards を元に戻しておく.

いやーこえーこえー. まあどうせ大した物入れてないからどうでもいいっちゃいいんだけどね. 後学のためにあがいてみた次第.

しかしこんなんできてしまうとか,git はやりたい放題だな.