Joonas' Note

Joonas' Note

git push 시 RPC failed; HTTP 400 해결법 본문

개발

git push 시 RPC failed; HTTP 400 해결법

2024. 4. 7. 02:24 joonas

    문제

    git push 를 하다보면 아래와 같이 RPC failed 를 이유로 실패하는 경우가 있다.

    $ git push origin
    Enumerating objects: 23, done.
    Counting objects: 100% (23/23), done.
    Delta compression using up to 10 threads
    Compressing objects: 100% (20/20), done.
    error: RPC failed; HTTP 400 curl 18 HTTP/2 stream 7 was reset
    send-pack: unexpected disconnect while reading sideband packet
    Writing objects: 100% (20/20), 342.08 MiB | 21.30 MiB/s, done.
    Total 20 (delta 10), reused 0 (delta 0), pack-reused 0
    fatal: the remote end hung up unexpectedly
    Everything up-to-date

    메시지를 자세히 보면, 342 MiB 정도의 Writing object 단계를 지나서 발생했음을 알 수 있다.

    해결 방법

    git 은 전송 가능한 버퍼 최대 사이즈의 기본값을 1MiB 로 두고 있다.

     

    Git - git-config Documentation

    When using the deprecated [section.subsection] syntax, changing a value will result in adding a multi-line key instead of a change, if the subsection is given with at least one uppercase character. For example when the config looks like [section.subsection

    git-scm.com

    따라서 다음과 같이 HTTP 로 전송 가능한 바이트를 500MB 로 늘리는 법이다.

    $ git config http.postbuffer 524288000

    그럼에도 불구하고

    하지만 위와 같이 500MB로 제한을 올렸다고해서 문제가 해결되지 않을 수 있다.
    왜냐하면 git은 파일의 최대 전송 크기를 100MB을 기본값으로 하기 때문에, git LFS(Large File System) 설정이 필요하다.

    $ git push
    Enumerating objects: 23, done.
    Counting objects: 100% (23/23), done.
    Delta compression using up to 10 threads
    Compressing objects: 100% (20/20), done.
    Writing objects: 100% (20/20), 342.08 MiB | 23.21 MiB/s, done.
    Total 20 (delta 10), reused 0 (delta 0), pack-reused 0
    remote: Resolving deltas: 100% (10/10), completed with 3 local objects.
    remote: error: Trace: e8602a1dfaf4015bf614f80fa9d794ac8d871b63bbe56557acbdd5ebac858b0b
    remote: error: See https://gh.io/lfs for more information.
    remote: error: File backend/cnn/unique-disco-14.ckpt is 342.80 MB; this exceeds GitHub's file size limit of 100.00 MB
    remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
    To https://github.com/joonas-yoon/quick-draw-clone.git
     ! [remote rejected] main -> main (pre-receive hook declined)
    error: failed to push some refs to 'https://github.com/joonas-yoon/quick-draw-clone.git'

    히스토리에서 큰 파일 제외시키기

    꼭 업로드하지 않아도 되는 파일이라면, 로컬 git 브랜치에서 (용량이 큰) 해당 파일이 추가된 커밋을 제거하는 방식으로 우선 오류 없이 push 할 수 있다.

    직전 커밋에 파일이 추가된 상황이라면 git commit (amend) 로 해결할 수 있지만, 조금 더 이전 커밋에 있다면 interactive rebasing 으로 문제의 커밋을 drop 하여 해결할 수 있다.

    참고

     

    git push fails: RPC failed; result=22, HTTP code = 411

    I have only one branch. For a few months I have been using git push origin master to commit to my local repository. Last night after I made some minor changes to my local repository and tried to ...

    stackoverflow.com

     

    Comments