git-lfsで、サイズの大きいファイルを管理できるというので試した。実体が通常のリポジトリと違うところに保存されて、通常のリポジトリでは、実体へのアクセス情報が書かれたポインタファイルのみ管理されるようだ。
で、管理されているポインタファイルを実体に戻そうとしたら、戻らなくなった。
やったこと
-
lfsを使ってみる
git init echo 'hoge' > lfs_test echo 'moge' > moge git lfs track lfs_test git add . git commit -m 'test'
-
lfs_testファイルは、実体ではなくポインタであることを確認
git log -p -1
-
lfsの使用を辞めようとしたが、ポインタのままになってて、変更判定されない
git lfs untrack lfs_test git add -u git commit -m 'test2'
戻し方?
仕方ないので、一旦削除して、実体をコミットしなおして、まとめた
git rm --cached lfs_test
git commit -m 'test3'
git add .
git commit -m 'test3a'
git rebase -i HEAD\^\^ # fixup でまとめた
調査、検証、マニュアル精査もしてないので、普通の方法があるのかも。
でも、ヘルプにもそれっぽいこと書いてなかったし、戻さないのだろうか。git lfs -h
経緯
なんでこんなことしようと思ったかというと、lfs使ったリポジトリをDockerhubでautobuildしたら、ビルドに失敗した。
lfsに入っているファイルをADDして、そこに入ってるはずのファイルをRUNしようとしてこけてた。ADDは成功してる。
となると、Dockerhubがlfs未対応で、ADDしたのは実体ではなくポインタファイルだと考えられる。検証してもいいけど、面倒なので…
http://stackoverflow.com/questions/33327780/dockerhub-automatic-build-with-github-lfs
https://github.com/docker/hub-feedback/issues/500
実体に戻したら、ビルドに成功した
https://hub.docker.com/r/minanon/archlinux/builds/
残ってる課題
- lfsの正常な戻し方
- dockerhubのautobuildでlfsを使用したい