Close

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 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

기본값이 250인 선택적 변수입니다. git gc--aggressive 옵션과 함께 실행될 때 개체 패킹의 델타 압축 단계에서 소요되는 시간을 제어합니다.

gc.aggressiveDepth

기본값이 50인 선택적 변수입니다. git gc --aggresive를 실행하는 동안 git-repack이 사용하는 압축 수준을 제어합니다

gc.pruneExpire

기본값이 "2주 전"인 선택적 변수입니다. 액세스할 수 없는 개체를 정리하기 전에 보존할 기간을 설정합니다

gc.worktreePruneExpire

기본값이 "3개월 전"인 선택적 변수입니다. 오래된 작업 트리를 삭제하기 전에 보존할 기간을 설정합니다.

git gc 실행

사실 git gcgit prune, git repack, git packgit rerere와 같은 다른 내부 하위 명령의 번들을 실행합니다. 이러한 명령의 전반적인 책임은 git gc 구성에서 설정한 임계값 수준을 벗어나는 Git 개체를 식별하는 것입니다. 식별된 개체는 압축되거나 정리됩니다.

git gc 모범 사례 및 FAQ


가비지 컬렉션은 자주 사용하는 몇 가지 명령에서 자동으로 실행됩니다.

git gc를 수동으로 실행하는 빈도는 리포지토리의 활동 수준과 상응합니다. 기여하는 개발자가 한 명 있는 리포지토리는 사용자가 여러 명인 자주 업데이트되는 리포지토리보다 git gc를 훨씬 적게 실행해야 합니다.

git gc 및 git prune 비교


git gc는 상위 명령이고 git prune은 하위 명령입니다. git gc는 내부적으로 git prune을 트리거합니다. git prunegit 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 --autogit 구성에서 느슨한 개체와 패킹 압축 크기에 대한 임계값을 확인합니다. 이 값은 git config로 설정할 수 있습니다. 리포지토리가 정리 임계값 중 하나라도 초과하면 git gc --auto가 실행됩니다.

git gc 시작하기


여러분은 아마 git gc를 이미 사용하고 계실 것입니다. 이 명령은 모범 사례 섹션에서 설명하 한 것처럼 자주 사용하는 명령을 통해 자동으로 호출됩니다. 수동으로 호출하려면 git gc를 실행하면 되며, 수행한 작업을 나타내는 출력이 표시됩니다.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up