【Git】Gitにサイズの大きいファイルをPushする
はじめに
この間、4GBのHyper-VイメージファイルをGitLabにpushができず、
ハマった時のメモです。
状況
- クライアントOS:Windows10
- Gitクライアント:Git for Windows2.22
- Gitサーバ:GitLab 10.1.4-ee
- pushしたいもの:4GB超の.7zファイル(中身はHyper-Vイメージ)
なにも考えずにgit pushしたら、
ダウンロード試した人から、
ファイル壊れてません?と指摘され、、
ほんとだ。200MBぐらいだし、やたら小さいぞ…
ってなって、やり直した次第です。
解決方法
- Git LFSのインストール
- .gitattributes にバイナリファイルを登録
- Out of Memory対策
1.Git LFSインストール
ファイルの目た情報のみをGitで管理して、 ファイルの実態はリモートサーバで一元管理する仕組みだそうです。
$ git lfs install
なんか調べると、インストールって言ってたり、
初期化って言ってたりしますが、
コマンドのレスポンス的には、初期化っぽいです。
Git for Windowsを使用してましたが、特に意識せずたたきました。
2. .gitattributes にバイナリファイルを登録
このバイナリファイルはLFSで管理してくださいね、
ってGitくんに認識させるために以下のコマンドをたたきます。
$ git lfs track "*.7z"
"*.7z"の部分は、使用する拡張子に置き換えてください。
.gitattributesってファイルが追加されて、
こんな感じになってます。
*.7z filter=lfs diff=lfs merge=lfs -text
3. Out of Memory対策
環境がWindowsなこともあって、
Out of Memory対策も仕掛けておきます。
- バッファサイズ拡大
$ git config http.postBuffer 524288000
- 利用メモリサイズを大きくする
$ git config --global pack.windowMemory "524m"
- スレッド数減らす
$ git config --global pack.threads "2"
余談
GitもSVNも上手〜に、きれい〜に運用できた試しがないんですよね〜っで先輩と今日話してました。 上手〜に、きれい〜に運用するためにはどんな仕組みが必要なんですかねぇ。