푸시 제한 정보
GitHub은(는) 단일 푸시에 대해 최대 2GB 제한을 가합니다. 매우 큰 리포지토리를 처음으로 업로드하거나, 다른 플랫폼에서 큰 리포지토리를 가져오거나, 기존의 큰 리포지토리의 기록을 다시 작성하려고 할 때 이 제한에 도달할 수 있습니다.
이 제한에 도달하면 다음 오류 메시지 중 하나가 표시 될 수 있습니다.
fatal: the remote end hung up unexpectedly
remote: fatal: pack exceeds maximum allowed size
푸시를 더 작은 부분으로 분할하거나 Git 기록을 삭제하고 처음부터 시작할 수 있습니다. 2GB보다 큰 단일 커밋을 수행했지만 Git 기록을 삭제하고 처음부터 시작할 수 없는 경우, 대화형 다시 지정하기를 수행하여 큰 커밋을 여러 개의 작은 커밋으로 분할해야 합니다.
큰 푸시 분할
각각의 크기가 2GB 미만이어야 하는 작은 부분으로 푸시를 분리하여 제한에 도달하는 것을 방지할 수 있습니다. 분기가 이 크기 제한 내에 있는 경우, 한 번에 모두 푸시할 수 있습니다. 그러나 분기가 2GB보다 큰 경우, 푸시를 더 작은 부분으로 분할하고 한 번에 몇 개의 커밋만 푸시해야 합니다.
-
원격을 아직 구성하지 않은 경우, 리포지토리를 새 원격으로 추가합니다. 자세한 내용은 "원격 리포지토리 관리"을(를) 참조하세요.
-
로컬 리포지토리에서 기본 분기의 기록을 따라 분산된 적절한 커밋을 찾으려면 다음 명령을 실행합니다.
git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0'
이 명령은 1000번째 커밋마다 표시됩니다. 수를 늘리거나 줄여 단계의 크기를 조정할 수 있습니다.
-
이러한 각 커밋을 호스트된 GitHub 리포지토리에 한 번에 하나씩 푸시합니다.
git push REMOTE-NAME +<YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAME
remote: fatal: pack exceeds maximum allowed size
메시지가 표시되면 2단계에서 단계의 크기를 줄이고 다시 시도합니다. -
2단계부터 기록에서 식별한 모든 커밋에 대해 동일한 프로세스를 진행합니다.
-
이 리포지토리가 GitHub에 처음 푸시되는 경우 최종 미러 푸시를 수행하여 나머지 참조가 푸시되었는지 확인합니다.
git push REMOTE-NAME --mirror
그래도 너무 큰 경우, 동일한 단계를 사용하여 단계별로 다른 분기를 푸시해야 합니다.
절차에 익숙해지면 2~4단계를 자동화하여 프로세스를 간소화할 수 있습니다. 예시:
step_commits=$(git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0')
echo "$step_commits" | while read commit message; do git push REMOTE-NAME +$commit:refs/heads/BRANCH-NAME; done
처음부터 시작
리포지토리에 기록이 없거나 초기 커밋이 자체적으로 2GB를 초과했으며 Git 기록을 다시 설정해도 상관없는 경우 처음부터 시작할 수도 있습니다.
-
로컬 복사본에서 숨겨진
.git
폴더를 삭제하여 이전 Git 기록을 모두 제거하고 파일로 가득 찬 일반 폴더로 다시 변환합니다. -
새 빈 폴더를 만듭니다.
-
새 폴더에서
git init
및git lfs install
를 실행하고 새 빈 GitHub 리포지토리를 원격으로 추가합니다. -
이미 Git 대용량 파일 스토리지을(를) 사용하고 있으며 사용하려는 Git LFS 추적 규칙이 이전 폴더의
.gitattributes
파일에 모두 있는 경우, 새 폴더에 처음 복사하는 파일이어야 합니다. Git LFS에 대한 항목이 일반 Git 스토리지에 커밋될 가능성이 없도록 다른 파일을 추가하기 전에 추적 규칙이 적용되었는지 확인해야 합니다.Git LFS을(를) 아직 사용하지 않는 경우 이 단계를 건너뛰거나 다른 파일을 복사하기 전에 새 폴더의
.gitattributes
파일에서 사용하려는 추적 규칙을 설정할 수 있습니다. 자세한 내용은 "Git Large File Storage 구성"을(를) 참조하세요. -
2GB보다 작은 파일을 일괄 처리로 이전 폴더에서 새 폴더로 이동합니다. 각 일괄 처리가 수행된 후 커밋을 만들고 푸시한 후 다음 일괄 처리를 수행합니다. 신중한 접근 방식을 취하고 약 2GB를 유지할 수 있습니다. 또는 Git LFS에 대한 파일이 있는 폴더가 있는 경우 일괄 처리 당 2GB 제한을 고려할 때 해당 파일을 무시할 수 있습니다.
이전 폴더가 비어 있으면 GitHub 리포지토리에 모든 항목이 포함되어 있어야 합니다. Git LFS을(를) 사용하는 경우 Git LFS에 대한 모든 파일을 Git LFS 스토리지로 푸시해야 합니다.