一日中分厚い雲がたれこめ,夕方からは雨もぱらつく中でおとなしくくらしにはげんだ一日でした.
昨晩はもたもたしてやや遅くなりつつも1時にはなんとか布団に入れるはずが,朦朧とした頭でボルゴウを更新しようとしたらなぜか変更が push できない!!激昂しそうになるのを必死に抑えながら手を替え品を替えいろいろためしてみてもぜんぜんうまくいかず全身がドンドンくさくなってきて,結局なにも解決しないまま2時半くらいにあきらめて寝ました.
そのあと10時半くらいにどんよりとした気分で起き出し,おせんたくをしつつあらためていろいろ確認したら一瞬で理由がわかりました.どうやら submodule を参照する側の remote url が submodule を管理するリポジトリのものになっていて,しかもへろへろの状態で force push してしまったせいで submodule 自体の変更でも参照する側の変更でも絶対にコンフリクトする最強の状態異常になっていたらしい.すごいですよ,module -> submodule -> module の最短ループが組まれているわけですからね.なんでこんなことになったんだと思い返したらつい昨日 ssh 経由で git pull をしようとしてて, submodule 内にいるつもりで git remote set-url していた記憶が蘇ってきました.こんなやつばっかじゃあソフトウェア産業は成り立たないと思いますが,また同じミスをしてしまったときのために修正手順をメモしておきます.要は submodule のぐじゃぐじゃになってしまった history をローカルの内容で強制的に書き換え,あとは ref を直して submodule の依存を修正したらもとにもどるはずです.
# submodule の中身を管理しているディレクトリへ移動 cd path/to/submodule # 強制的にリモートをローカルで書き換え git push -f
# submodule を参照しているレポジトリを新たにクローン git clone https://github.com/username/repository.git # or remote-url を修正 git remote set-url origin https://github.com/username/repository.git # submodule を削除 git submodule deinit -f [submodule_name] git rm -f [submodule_path] rm -rf .git/modules/[submodule_name] # 改めて submodule を追加し直し git submodule add -b [tracking_branch] https://github.com/username/submodule.git [submodule_name] # submodule の取得 git submodule update -i # remote に変更を push git commit -a git push # 破壊されてしまった commit log に思いを馳せる # どうしてあたしっていつもこうなっちゃうんだろう……
書けば書くほどこんなミスするやついるわけないだろとの確信が深まってきました.というかそもそも submodule 自体こんな毎日更新するものではないのかもしれません.なんにせよべやべやの状態で作業するときは -f オプションを封印しようと思います.といったてんやわんやを解決したら睡眠不足がしんどくなってきたので少しだけお昼寝して,午後はひたすらおそうじやオタク・ドロウイングに邁進しているうちに過ぎていきました.晩は炊き立てのごはんを残り物と一緒にたっぷり食べました.
以上です.どうもありがとうございました