git でハマった

いろいろあってgitを使い始めた今日この頃。
outofmemoryでcloneとかgcとかいろいろはかどらない事態に遭遇したのでメモ。

原因はある程度の大きさのバイナリ定数ファイル。
ulimitでユーザーの対話シェルでのメモリはガッツリ制限されてる環境での作業が行われているのだけれども、この定数ファイルがメモリの制限値を越えているのが原因で、outofmemoryエラーが発生しているものと考えられる。っつうか、ユーザは0.1%もメモリをつかえないって、ちょっとひどいな。ジョブスケジューラにジョブを投げればメモリもたくさん使えるんだけれども、これって、ちょっと使い勝手がよくない。どうしたものか,,,。(そもそも、darcsやmercurialやbazaarでなくてgitなのは、pythonやghcが入っていない環境で、とりあえずユーザー権限でインストールして使うため、というのも半分はある。つまり、そもそもインストールできるのはgitだけだったという話。svnはすでにはいってるんですけどね。)

といっても、これらのファイルはプログラムには不可分なので、できればリポジトリで一括管理したいところ。でも、他のマシンで試して見たところ。全部で10GB越えるようなリポジトリは、ちょっといろいろはかどらない気がする。でかすぎるんだよなぁ。。。個々のファイルはそれほどでもなんだけれども、、、。

https://git.wiki.kernel.org/index.php/GitSvnComparison
このあたりの記事を読むと、バイナリファイルの管理はsvnの方が良さげとか書いてあるし、他の分散型cvsについても、ちょっと検索すれば、すぐに大きなバイナリ定数ファイルはまずいことがわかる。

結局、定数をどうしても管理するなら、svnを使うというのが、スジなんじゃないかと思いつつも、そういうことはさせてくれないような感じだし、そもそも他人に使わせる段になったら問題。割と困ってしまっている。tarで固めて適当に保存するのがいいのかなぁ。。。rsyncとかつかってみたりして。

—-
結局、バイナリファイルは管理しないことにした。
定数ファイルをそうそう変更することもないので、変更時にtar.gzで固めておけばいいやという判断。

—-
ちなみに、pythonがない環境でのgitのインストールは、公式サイトからtarを拾ってきて
gmake configure
configure –prefix=”path” #CFLAGS=64bitオプションとかもお好みで
config.mak.autogenを編集して、最後にNO_PYTHON=YesPleaseを追加。
Makefileかconfig.mak.autogenのどっちだったか忘れたけど、もしgnu installにパスが通っていなかったら、installコマンドでgnu coreutilsから入れたinstallを使うように、install=を書きなおしておく。
(ちなみに、その環境の下ではcoreutilsのコンパイルは簡単だったので省略)
で、あとは普通に
gmake
gmake test
gmake install
でOK
—-
あと、/bin/shがbashじゃないとダメっぽい。stashとか。ひょっとしたら作業環境のshの方が悪いのかもしれないけど。


コメントを残す