Git gc
git gc
명령은 리포지토리 유지 관리 명령으로 "gc"는 가비지 컬렉션의 약자입니다. git gc
을 실행하는 것은 말 그대로 현재 리포지토리에서 Git으로 인해 지저분해진 부분을 정리하도록 Git에 지시하는 것입니다. 가비지 컬렉션은 동적 메모리 할당을 수행하는 해석된 프로그래밍 언어에서 비롯된 개념입니다. 해석된 언어의 가비지 컬렉션은 실행 중인 프로그램에서 액세스할 수 없게 된 메모리를 복구하는 데 사용됩니다.
Git 리포지토리에는 다양한 유형의 가비지가 쌓여 있습니다. Git 가비지 유형 중 하나는 고립된 커밋 또는 액세스할 수 없는 커밋입니다. git reset 또는 git rebase와 같은 기록 변경 명령을 실행할 때 Git 커밋에 액세스가 불가능해질 수 있습니다. 기록을 보존하고 데이터 손실을 방지하기 위해 Git은 분리된 커밋을 삭제하지 않습니다. 분리된 커밋은 여전히 git log
를 통해 체크아웃, cherry pick 및 검사할 수 있습니다.
git gc
는 분리된 커밋 정리 외에도 저장된 Git 개체를 압축하여 소중한 디스크 공간을 확보해 줍니다. Git은 비슷한 개체 그룹을 식별하면 '팩'으로 압축합니다. 팩은 Git 개체의 zip 파일과 같으며 리포지토리 내의 ./git/objects/pack
디렉터리에 있습니다.
git gc는 실제로 무엇을 합니까?
실행하기 전에 git gc
는 먼저 여러 git config 값을 확인합니다. 이러한 값은 나머지 git gc
책임을 명확히 하는 데 도움이 됩니다.
git gc 구성
gc.reflogExpire
기본값이 90일인 선택적 변수입니다. 브랜치 reflog의 레코드를 보존할 기간을 설정하는 데 사용됩니다.
gc.reflogExpireUnreachable
기본값이 30일인 선택적 변수입니다. 액세스할 수 없는 reflog 레코드를 보존할 기간을 설정하는 데 사용됩니다.
gc.aggressiveWindow
관련 자료
전체 Git 리포지토리를 이동하는 방법
솔루션 보기
Bitbucket Cloud에서 Git에 대해 알아보기
기본값이 250인 선택적 변수입니다. git gc
가 --aggressive
옵션과 함께 실행될 때 개체 패킹의 델타 압축 단계에서 소요되는 시간을 제어합니다.
gc.aggressiveDepth
기본값이 50인 선택적 변수입니다. git gc --aggresive
를 실행하는 동안 git-repack
이 사용하는 압축 수준을 제어합니다
gc.pruneExpire
기본값이 "2주 전"인 선택적 변수입니다. 액세스할 수 없는 개체를 정리하기 전에 보존할 기간을 설정합니다
gc.worktreePruneExpire
기본값이 "3개월 전"인 선택적 변수입니다. 오래된 작업 트리를 삭제하기 전에 보존할 기간을 설정합니다.
git gc 실행
사실 git gc
는 git prune, git repack
, git pack
및 git rerere
와 같은 다른 내부 하위 명령의 번들을 실행합니다. 이러한 명령의 전반적인 책임은 git gc
구성에서 설정한 임계값 수준을 벗어나는 Git 개체를 식별하는 것입니다. 식별된 개체는 압축되거나 정리됩니다.
git gc 모범 사례 및 FAQ
가비지 컬렉션은 자주 사용하는 몇 가지 명령에서 자동으로 실행됩니다.
git gc
를 수동으로 실행하는 빈도는 리포지토리의 활동 수준과 상응합니다. 기여하는 개발자가 한 명 있는 리포지토리는 사용자가 여러 명인 자주 업데이트되는 리포지토리보다 git gc
를 훨씬 적게 실행해야 합니다.
git gc 및 git prune 비교
git gc
는 상위 명령이고 git prune
은 하위 명령입니다. git gc
는 내부적으로 git prune
을 트리거합니다. git prune
은 git gc
구성에서 액세스할 수 없는 것으로 간주되는 Git 개체를 제거하는 데 사용됩니다. git prune에 대해 자세히 알아보세요.
git gc aggressive란 무엇입니까?
git gc
는 --aggressive
명령줄 옵션으로 호출할 수 있습니다. --aggressive
옵션을 사용하면 git gc
가 최적화 작업에 더 많은 시간을 할애하게 됩니다. 이로 인해 git gc
는 더 느리게 실행되지만 완료 후에는 더 많은 디스크 공간을 절약할 수 있습니다. --aggressive
의 효과는 지속적이며 리포지토리를 대량으로 변경한 후에만 실행하면 됩니다.
git gc auto란 무엇입니까?
git gc --auto
명령 변형은 실행하기 전에 먼저 리포지토리에 정리가 필요한지 확인합니다. 정리가 필요하지 않은 경우 작업을 수행하지 않고 종료합니다. 일부 Git 명령은 실행 후 암시적으로 git gc --auto
를 실행하여 만들어진 느슨한 개체를 정리합니다.
실행하기 전에 git gc --auto
는 git
구성에서 느슨한 개체와 패킹 압축 크기에 대한 임계값을 확인합니다. 이 값은 git config로 설정할 수 있습니다. 리포지토리가 정리 임계값 중 하나라도 초과하면 git gc --auto
가 실행됩니다.
git gc 시작하기
여러분은 아마 git gc
를 이미 사용하고 계실 것입니다. 이 명령은 모범 사례 섹션에서 설명하 한 것처럼 자주 사용하는 명령을 통해 자동으로 호출됩니다. 수동으로 호출하려면 git gc
를 실행하면 되며, 수행한 작업을 나타내는 출력이 표시됩니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.