Github remote push pack size exceeded

前端 未结 2 1587
清酒与你
清酒与你 2020-12-02 20:32

I am new to Git and have a fairly large project that I want to push to a remote repo (Repo B) on Github. The original project was on Github as well but from a different repo

相关标签:
2条回答
  • 2020-12-02 20:45

    As onionjake noted in his answer, the pack.packSizeLimit setting does not affect pushes. As he suggested, this can often be addressed by using multiple pushes with fewer commits each. rurban posted a comment on how to automatically push chunks of 500 commits. Following is a modified version of his comment, generalized to work correctly regardless of whether the branch on the remote does not exist or exists and contains some of the commits already. I also added the --first-parent argument to the git log calls to prevent errors when the repository contains multiple root commits. I also made some tweaks to improve effiency, and added an additional call to git push to push the final (partial) batch of commits:

    # Adjust the following variables as necessary
    REMOTE=origin
    BRANCH=$(git rev-parse --abbrev-ref HEAD)
    BATCH_SIZE=500
    
    # check if the branch exists on the remote
    if git show-ref --quiet --verify refs/remotes/$REMOTE/$BRANCH; then
        # if so, only push the commits that are not on the remote already
        range=$REMOTE/$BRANCH..HEAD
    else
        # else push all the commits
        range=HEAD
    fi
    # count the number of commits to push
    n=$(git log --first-parent --format=format:x $range | wc -l)
    
    # push each batch
    for i in $(seq $n -$BATCH_SIZE 1); do
        # get the hash of the commit to push
        h=$(git log --first-parent --reverse --format=format:%H --skip $i -n1)
        echo "Pushing $h..."
        git push $REMOTE ${h}:refs/heads/$BRANCH
    done
    # push the final partial batch
    git push $REMOTE HEAD:refs/heads/$BRANCH
    
    0 讨论(0)
  • 2020-12-02 20:47

    The packsize limit does not affect git protocol commands (your push).

    From git-config under pack.packSizeLimit:

    The maximum size of a pack. This setting only affects packing to a file when repacking, i.e. the git:// protocol is unaffected.

    When executing a push git will always create exactly one pack no matter the size!

    To fix this use two (or more) pushes:

    git push remoteB <some previous commit on master>:master
    ...
    git push remoteB <some previous commit after the last one>:master
    git push remoteB master
    

    These pushes will all have smaller packs and will succeed.

    0 讨论(0)
提交回复
热议问题