山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

git-svnでOut of memoryが出て困ったのでsmartgit使って解決した話。

概要

  • git-svnで少し楽になろうと思ったらOut of memoryが出てわけわかめになったという話。
  • 結局git-svn、SourceTreeでは解決できず。
  • smartgitを使用することでローカルにgitリポジトリが作れました。

環境

Windows 7 Professional git version 1.9.4.msysgit.2

事象

  • コマンド
$ mkdir svngit
$ cd svngit
$ git svn init -s --prefix=svn/ https://xxx/yyy
$ git svn fetch -r 50000:HEAD
  • 出力
    • hogehoge.sql は当然、こんなに大きなサイズではありません。
(略)
        A       hoge/huga/piyo/hogehoge.sql
Out of memory during request for 156 bytes, total sbrk() is 251326464 bytes!

解決方法

  • 概要でも書きましたが、smartgitを使用することで解決。

  • ↓のコメントが決め手になりました。(引用元

    単体でもすぐれたGUIクライアントなのですが、SVN連携にはgit-svnより強力な連携機構を独自実装しているのでこちらならエラーなく取り込めるかもしれません。

  • smartgitのインストール、設定などは特に問題ないかと思いますが、ここが参考になりそうです。

解析(予想)

  • 使用しようとしているリポジトリのファイルを全て合わせると数ギガとかなりでかい事が原因か。
  • git内で使用されているperl内で発生してるっぽい。
    • タスクマネージャで見ててもperlのメモリが256M位になると発生する。
  • 以下のスクリプトで発生してるっぽい。
    • 「$read」にファイル読んで入れてる所が原因?
C:\Program Files (x86)\git\lib\perl5\site_perl\Git\SVN.pm
  • 「sbrk()」はCの関数らしい

試したこと

  • .git/config の編集。
    • メモリの設定項目を適当に上げてみた。
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
    packedGitWindowSize = 1024m
    packedGitLimit = 1024m
[pack]
    threads = 2
    windowMemory = 1024m
    deltaCacheSize = 512m
    packSizeLimit = 1024m
[svn-remote "svn"]
    url = https://xxx/yyy
    fetch = hoge/huga/trunk:refs/remotes/svn/trunk
    branches = hoge/huga/branches/*:refs/remotes/svn/*
    tags = hoge/huga/tags/*:refs/remotes/svn/tags/*

参考URL