gitリポジトリをshallowに変換
- 環境 git-1.7.4
$ git clone --depth=1 https://hoge.com/hoge/hoge.git
とかでリポジトリをshallowクローンできるのは知っていたのですが、通常のリポジトリを簡単にshallow化する方法を発見したのでメモメモ。
$ git clone https://hoge.com/hoge/hoge.git hoge $ cd hoge $ git log --oneline | wc -l 540 $ du -sh .git 144M .git
hogeは架空のリポジトリです。普通にcloneしたらこのリポジトリは540コミット、144Mほどの容量でした。
んで、shallow化します。
$ git fetch --depth=1 $ git log --oneline | wc -l 2 $ du -sh .git 144M .git
fetchに--depthを入れるだけでコミット数が2に!しかしリポジトリの容量がまだ変わっていません。
$ git gc $ du -sh .git 292M .git $ git prune 29M .git
これでリポジトリの容量もそれなりのサイズになりました。gcしたときにいったんファイル数が増えるのが謎なんですが、gc/pruneをあたりを勉強して出なおすことにします。
ちなみにshallowリポジトリはclone元に使えないのでどうしてもそこからcloneしたい場合は再度すべてのコミットをfetchすれば良いです。
$ git fetch --depth=1000 $ git log --oneline | wc -l 540
cloneだと--depth=0で全部fetchしてくれるんですが、fetchはダメみたい。コミット数をかるく超える値を突っ込めば全部取って来てくれるようです。