사내에 꽤 오래되고 큰 git 저장소가 있는데 새로운 PC 에서 clone 을 수행하자 다음과 같은 오류가 발생했습니다.


$ git clone https://my.git.server/group/repos1.git


Cloning into 'repos1'...
remote: Counting objects: 4793, done.
remote: Compressing objects: 100% (3256/3256), done.
fatal: read error: Invalid argument, 255.05 MiB | 1.35 MiB/s
fatal: early EOF
fatal: index-pack failed
BASH

.gitconfig 수정

stackoverflow 에서 유사한 사례를 확인한 후에 가장 간단해 보이는 해결책에서 제시한 대로 .gitconfig 에 다음 설정을 추가해 보았습니다.

vi ~/.gitconfig
CODE



~/.gitconfig

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 

[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m
CODE


하지만 index-pack failed 에러는 다시 발생했고 메모리를 2배로 늘려봐도 마찬가지였습니다.

[core] 
packedGitLimit = 1024m 
packedGitWindowSize = 1024m 

[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m
CODE


일부만 clone

그후에 좀 복잡해 보이는 2번째 방법대로 다음 단계를 시도했습니다.


  1. 압축 사용하지 않도록 설정

    $ git config --global core.compression 0
    BASH
  2. 저장소 전체가 아닌 일부만 clone 하도록 실행

    $ git clone --depth 1 https://my.git.server/group/repos1.git
    BASH
  3. 나머지 부분 clone 

    $ cd repos1
    $ git fetch --unshallow 
    BASH

    또는 아래 명령어 실행

    $ git fetch --depth=2147483647
    BASH
  4. 나머지 부분 pull

    $ git pull --all
    CODE

하지만 위 방법은 저장소를 일부만 clone 하는 2번째 단계에서 막혔습니다.


저장소 접근 프로토콜 변경

이제 무엇을 해야 하나 고민하다가 다음과 같이 저장소 접근 프로토콜을 HTTPS 에서 SSH 로 변경했더니 정상적으로 clone 이 이루어졌습니다.

$ git clone ssh://git@my.git.server/group/repos1.git
BASH

Stackoverflow 에 있는 방법대로 해도 안 될 경우 마지막 방법을 시도해 보세요.

Ref