본문 바로가기
DEV

[Git 오류] git push 안되는 오류, RPC failed 해결, 원래대로

by 이호수 2024. 12. 5.

기존 프로젝트를 통째로 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 옵션으로 설정하거나, 문제가 생길 때마다 그때그때 설정을 바꿔주는게 좋다고 한다!!!