git pushが重くて動かないときの対処法 | コマンドで解決しました

  • 作成日 2026.06.17
  • git
git pushが重くて動かないときの対処法 | コマンドで解決しました

git pushを実行したときに処理が重くなったり、途中で止まったように見えたりする場合、Gitの圧縮処理やHTTP送信バッファが原因になっていることがあります。特に大きなファイルや大量の変更履歴を含むリポジトリでは、メモリ使用量や送信サイズの影響でpushが失敗するケースがあります。本記事では、git pushが重い場合に効果があったGit設定をまとめます。

発生した症状

git pushを実行した際に、以下のような状態になることがあります。

・git pushがなかなか終わらない

・Writing objectsで止まる

・Compressing objectsで時間がかかる

・途中でエラーになる

・メモリ使用量が大きくなる

・リモートへ送信されない

特に変更量が多い場合や、大きめのファイルを含むコミットをpushする場合に発生しやすいです。

原因として考えられること

git push時には、Gitがオブジェクトを圧縮してリモートリポジトリへ送信します。

このとき、圧縮処理で多くのメモリを使用する場合があります。

また、HTTP経由でpushしている場合は、送信バッファのサイズが不足してエラーになることもあります。

そのため、以下の対策が有効です。

・圧縮時のメモリ使用量を制限する

・packファイルのサイズを制限する

・HTTP送信バッファを大きくする

圧縮時のウィンドウサイズを制限する

まず、pack.windowMemoryを設定します。

git config --global pack.windowMemory "256m"

この設定により、Gitがpackファイルを作成する際に使用するウィンドウメモリを制限できます。

メモリ使用量を抑えたい環境では有効です。

packファイルのサイズを制限する

次に、pack.packSizeLimitを設定します。

git config --global pack.packSizeLimit "256m"

この設定により、作成されるpackファイルのサイズ上限を指定できます。

大きすぎるpackファイルが作成されることを防ぎ、push時の負荷軽減につながります。

HTTP送信バッファを拡大する

HTTP経由でgit pushしている場合は、http.postBufferを大きくします。

git config --global http.postBuffer 524288000

524288000は500MBを意味します。

大きなデータをpushする場合、送信バッファが不足してエラーになることがあります。

この設定により、HTTP送信時のバッファサイズを拡大できます。

実行したコマンドまとめ

今回実行したコマンドは以下です。

git config --global pack.windowMemory "256m"
git config --global pack.packSizeLimit "256m"
git config --global http.postBuffer 524288000

グローバル設定のため、現在のユーザーで利用するGit全体に適用されます。

特定のリポジトリだけに設定したい場合は「–global」を外して、対象リポジトリ内で実行します。

git config pack.windowMemory "256m"
git config pack.packSizeLimit "256m"
git config http.postBuffer 524288000

設定内容を確認する

設定後は以下のコマンドで確認できます。

git config --global --list

該当項目だけ確認する場合はこちらです。

git config --global pack.windowMemory
git config --global pack.packSizeLimit
git config --global http.postBuffer

表示例

256m
256m
524288000

設定値が表示されれば反映されています。

再度git pushを実行する

設定後に再度pushします。

git push

ブランチを指定する場合

git push origin main

環境によっては初回pushに時間がかかる場合がありますが、設定前より安定して処理が進む可能性があります。

それでも重い場合に確認すること

上記設定でも改善しない場合は、リポジトリ自体が肥大化している可能性があります。

大きなファイルを確認します。

git rev-list --objects --all | sort -k 2

Git管理対象の容量を確認します。

du -sh .git

.gitディレクトリが大きい場合、過去に大容量ファイルをコミットしている可能性があります。

不要な大容量ファイルはGit管理から除外し、必要に応じてGit LFSの利用も検討します。

注意点

http.postBufferを大きくすると、一時的にメモリ使用量が増える可能性があります。

また、pack関連の設定はpush時の負荷軽減に役立ちますが、根本的にリポジトリが大きすぎる場合は別途整理が必要です。

特に以下のようなファイルはGit管理に向いていません。

・動画ファイル

・巨大な画像ファイル

・バックアップファイル

・ZIPファイル

・ビルド成果物

・node_modules

これらは.gitignoreで除外するのが基本です。

参考文献

Git公式ドキュメント(git config)

Git公式ドキュメント(git push)

Git公式ドキュメント(git repack)

Git LFS公式サイト

まとめ

git pushが重くて動かない場合は、Gitのpack圧縮処理やHTTP送信バッファが原因になっている可能性があります。

以下の設定を行うことで、メモリ使用量を抑えつつ、HTTP経由のpushを安定させることができます。

git config --global pack.windowMemory "256m"
git config --global pack.packSizeLimit "256m"
git config --global http.postBuffer 524288000

特に「Compressing objects」や「Writing objects」で止まる場合に効果が期待できます。根本的な対策としては、大容量ファイルをGit管理から外し、必要に応じてGit LFSを利用することも重要です。