기존 프로젝트를 통째로 git push 하려고 하자, 오류가 발생했다.

git push origin main
Enumerating objects: 109, done.
Counting objects: 100% (109/109), done.
Delta compression using up to 8 threads
Compressing objects: 100% (102/102), done.
error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet
Writing objects: 100% (109/109), 6.20 MiB | 8.28 MiB/s, done.
Total 109 (delta 3), reused 0 (delta 0), pac
git clone과 git init을 아무리 다시해도, 그대로였다.
원인을 stack overflow를 검색하니, 내가 push한 내용의 파일이 크거나 변경사항이 많아서 git이 한번에 처리할 수 있는 데이터 블록 크기(기본값 1MB)를 초과하면 발생하는 오류라고 한다.
이를 해결하기 위해서는 아래와 같은 명령어를 터미널에 입력해주면 된다.
git config --global http.postBuffer 120000000
특정 프로젝트에서 설정해버리고 싶다면 해당 디렉토리에서 --local을 붙이면 된다.
git config --local http.postBuffer 120000000
이 명령어들은 http.postBuffer의 크기를 늘려 git이 한번에 처리할 수 있는 데이터 양을 증가시킨다.
버퍼란?
데이터를 임시적으로 저장하는 메모리 공간으로, Git은 데이터를 서버에 전송하기 전 버퍼에 1차적으로 저장하게 된다고 한다.
파일을 업로드한 후에는 원상복구 하는게 좋다고 하는데, 이유는 다음과 같다.
1. 버퍼 크기만큼 메모리를 사용하기 때문에 불필요한만큼 큰 값이 설정되어 있으면 메모리 낭비 발생
2. 네트워크 대기 시간 증가
3. --global 옵션으로 설정했을 경우, 다른 프로젝트들에서도 부작용 발생 가능
아래와 같이 원복하면 된다. 명령 실행시, Git은 기본값인 1MB로 돌아간다.
git config --global --unset http.postBuffer
대용량 파일을 자주 업로드해야된다면, --local 옵션으로 설정하거나, 문제가 생길 때마다 그때그때 설정을 바꿔주는게 좋다고 한다!!!