Home Git Push 실패: RPC failed HTTP 400 에러 해결하기
Post
Cancel

Git Push 실패: RPC failed HTTP 400 에러 해결하기

문제 상황

  • VSCode에서 Git 커밋 후 “Sync Changes” 버튼을 클릭했을 때 다음과 같은 에러가 발생하였음

    class="highlight">
    1
    
      Git: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
    



    에러 원인

    HTTP Buffer 크기 제한 초과

    • Git의 기본 HTTP buffer 크기가 작아서 큰 데이터를 푸시할 때 실패함
    • 이미지나 바이너리 파일이 포함된 경우 더 자주 발생함
    • GitHub의 요청 크기 제한에 걸리는 경우가 있음

    HTTP POST Buffer란?

    • Git이 HTTP/HTTPS 프로토콜로 데이터를 전송할 때 사용하는 메모리 버퍼임
    • 푸시할 데이터를 이 버퍼에 임시로 저장한 후 서버로 전송함
    • 기본값은 1MB (1048576 bytes)로 설정되어 있음
    • 전송하려는 데이터가 버퍼 크기를 초과하면 HTTP 400 에러가 발생함

    일반적인 발생 시나리오

    • 대용량 파일을 커밋했을 때
    • 이미지 파일을 다수 추가했을 때
    • 여러 변경사항을 한 번에 푸시할 때



    해결 방법

    HTTP Buffer 크기 증가

    • Git의 HTTP POST buffer 크기를 증가시켜 문제를 해결할 수 있음

      class="highlight">
      1
      
        git config --global http.postBuffer 524288000
      
      class="highlight">
      1
      2
      3
      
        - `524288000`은 약 500MB를 의미함
        - `--global` 옵션으로 전역 설정함
        - 이후 모든 Git 저장소에 적용됨
      



      큰 파일 확인 (선택사항)

      • 어떤 파일이 큰지 확인하고 싶다면 다음 명령어를 사용함

        class="highlight">
        1
        
          git ls-files -s | sort -k4 -n -r | head -20
        



        푸시 재시도

        • 설정 변경 후 다시 푸시를 시도함

          class="highlight">
          1
          
            git push origin master
          
        • 정상적으로 푸시가 완료됨

          class="highlight">
          1
          2
          
            To https://github.com/username/repository.git
            287662a..641bc20  master -> master
          



          대안 방법

          SSH 프로토콜 사용

          • 위 방법으로 해결되지 않는다면 HTTPS 대신 SSH를 사용함

            class="highlight">
            1
            
              git remote set-url origin git@github.com:username/repository.git
            

            작은 단위로 나눠서 푸시

            • 특정 커밋만 푸시하여 크기를 줄임

              class="highlight">
              1
              
                git push origin <commit-hash>:master
              

              Git LFS 사용

              • 큰 파일을 자주 다룬다면 Git Large File Storage(LFS) 사용을 고려함

              Git LFS란?

              • Git Large File Storage(LFS)는 대용량 파일을 효율적으로 관리하기 위한 Git 확장 기능임
              • 큰 파일의 실제 내용은 별도 서버에 저장하고, Git 저장소에는 포인터(참조)만 저장함
              • 이미지, 비디오, 데이터셋 등 큰 바이너리 파일을 다룰 때 유용함
              • HTTP buffer 문제를 근본적으로 해결하고 저장소 크기도 줄일 수 있음

                class="highlight">
                1
                2
                3
                4
                
                  # Git LFS 설치 및 설정
                  git lfs install
                  git lfs track "*.png"
                  git lfs track "*.jpg"
                



                정리

                • 원인
                  • HTTP buffer 크기 제한 초과로 인한 푸시 실패
                • 해결
                  • git config --global http.postBuffer 524288000 설정으로 buffer 크기 증가
                • 예방
                  • 큰 파일은 Git LFS 사용 고려
                  • 이 설정은 한 번만 해주면 이후 동일한 문제가 발생하지 않음



                Reference

                Contents