ぴよ丸水産

週末ファゴッティストによる技術ブログ

【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ぐらいだし、やたら小さいぞ…
ってなって、やり直した次第です。

解決方法

  1. Git LFSのインストール
  2. .gitattributes にバイナリファイルを登録
  3. 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も上手〜に、きれい〜に運用できた試しがないんですよね〜っで先輩と今日話してました。 上手〜に、きれい〜に運用するためにはどんな仕組みが必要なんですかねぇ。