git gc
과 git repack -ad; git prune
사이에 차이가 있습니까?
예인 경우 git gc
(또는 그 반대)으로 수행 할 수있는 추가 단계는 무엇입니까?
공간 최적화 또는 안전과 관련하여 어느 것이 더 사용하기에 적합합니까?`git gc`와`git repack -ad '사이에 차이점이 있습니까? 망할 자두 '?
답변
git gc
과git repack -ad; git prune
사이에 어떤 차이가 있습니까?
기본적으로 git gc
은 관리 작업이 무엇이 필요한지에 대해 매우 보수적입니다. 예를 들어, 저장소의 느슨한 개체 수가 특정 임계 값을 초과하지 않으면 (gc.auto
변수를 통해 구성 가능) git repack
을 실행하지 않습니다. 또한 git gc
은 git repack
및 git prune
보다 많은 작업을 실행합니다.
예인 경우
git gc
(또는 그 반대)으로 수행 할 수있는 추가 단계는 무엇입니까?documentation,git gc
실행에 따르면
:
git-prune
git-reflog
git-repack
git-rerere
더 많은 사양
pack-refs --all --prune
reflog expire --all
repack -d -l
prune --expire
worktree prune --expire
rerere gc
: ifically는
source code of
gc.c
(lines 338-343)1 보면 우리는 가장에서 다음 명령을
를 호출하는 것을 볼 수있다
팩 (lines 121-126)의 수에 따라, 대신 (lines 203-212)-A
옵션을 repack
을 실행할 수 있습니다 :
* If there are too many loose objects, but not too many * packs, we run "repack -d -l". If there are too many packs, * we run "repack -A -d -l". Otherwise we tell the caller * there is no need. if (too_many_packs()) add_repack_all_option(); else if (!too_many_loose_objects()) return 0;
공지 사항을 line 211-212 of the need_for_gc
function에 저장소에 충분한 느슨한 객체가없는 경우 있음, gc
이 전혀 실행되지 않습니다.
이
더욱 documentation에 명확히한다 : 너무 많은 느슨한 개체 또는 저장소에 너무 많은 팩이있는 경우객실 청소가 필요합니다. 느슨한 오브젝트의 수가
다음 기존 팩 는gc.auto
구성 변수의 값인 을 초과하는 경우, 오브젝트가 모두git repack -d -l
을 사용하는 단일 팩으로 결합됩니다.gc.auto
값을0
으로 설정하면 느슨한 물체의 자동 포장이 비활성화됩니다. (a.keep
파일 표시 제외) 팩의 수gc.autoPackLimit
의 값을 초과하면git repack
-A
의 옵션을 사용하여 단일 패키지로 통합된다.
보시다시피, git gc
은 저장소의 상태에 따라 올바른 작업을 수행하기 위해 노력합니다.
공간 최적화 또는 안전성과 관련하여 어느 것이 더 좋습니까?안전하고 너무 많은 자원을 낭비하지 않고 - 일반적으로
그것은 좋은 모양 저장소를 유지하기 위해 필요한 최소한의 작업을 할 것이기 때문에 단순히 git gc --auto
를 실행하는 것이 좋습니다.
그러나 gc.auto
구성 변수를 0
으로 설정하여이 동작을 비활성화하지 않는 한 특정 명령에 따라 가비지 수집이 이미 자동으로 트리거 될 수 있습니다. documentation에서
:
이 옵션을 어떤 가사가 필요한지 여부를
git gc
검사와
--auto; 그렇지 않으면 작업을 수행하지 않고 종료됩니다. 일부 자식 명령은 많은 느슨한 개체를 만들 수있는 작업을 수행 한 후에git gc --auto
을 실행합니다.
그러므로 대부분의 저장소의 경우 이미 git gc
을 명시 적으로 실행하지 않아도됩니다. 왜냐하면이 저장소가 이미 사용자를 위해 관리되기 때문입니다. 2016년 8월 8일 이루어 커밋의 a0a1831
로서
.
git help gc
몇 가지 힌트 ...
옵션 구성 변수 gc.rerereresolved
가 이전에 해결 충돌 병합의 긴 기록이 보존되는 표시가 포함되어 있습니다.선택적 구성 변수 gc.rerereunresolved는 해결되지 않은 충돌 된 병합 레코드의 보관 기간을 나타냅니다.
나는 당신이 오직 git repack -ad; git prune
일을 수행한다고 생각하지 않습니다.