programing

git gui'를 실행할 때 "Loose Object" 팝업을 건너뛰는 방법

telecom 2023. 10. 27. 21:44
반응형

git gui'를 실행할 때 "Loose Object" 팝업을 건너뛰는 방법

git gui'를 실행하면 다음과 같은 팝업이 나타납니다.

이 리포지토리에는 현재 약 1500개의 느슨한 개체가 있습니다.

그런 다음 데이터베이스 압축을 제안합니다.이것을 해본 적이 있는데, 느슨한 물체를 250개 정도로 줄여주지만, 그렇다고 팝업이 억제되는 것은 아닙니다.다시 압축해도 느슨한 물체의 개수는 바뀌지 않습니다.

현재의 워크플로우는 Perforce에서 전환할 때 'rebase'를 상당히 사용해야 하며 Perforce는 여전히 표준 SCM입니다.Git가 표준 SCM이 되면 정기적인 병합을 할 것이며 느슨한 객체 문제는 크게 완화되어야 합니다.

그동안 이 '도움이 되는' 팝업은 정말 사라지게 하고 싶습니다.

아직 아무도 답이 없었기 때문에, 저는 그 대화 상자에 나타나는 코드를 제거하는 방법을 알아보기 위해 코드를 조사했습니다.발견했습니다.hint_gc그것을 하는 절차와 그것이 불리는 장소.이와 동시에 2011년 말에 대화 상자를 비활성화하기 위한 구성 옵션이 추가되었다는 것을 알게 되었습니다.이 변경 사항(git-gui 0.16.0의 일부)은 2011-12-14에 Git의 메인 라인에 병합되었습니다.

따라서 Git v1.7.9 이상을 사용하는 경우 다음 명령으로 경고 대화 상자를 비활성화할 수 있습니다.

git config --global gui.gcwarning false

이전 버전을 사용하는 경우 편집할 수 있습니다./lib/git-core/git-gui제거합니다.after 1000 hint_gc선 또는 편집/usr/share/git-gui/lib/database.tcl그리고 그의 몸을 제거합니다.hint_gc프로시저(procedure). (이러한 파일 경로는 Cygwin에 있습니다. - 다른 환경에서는 파일이 다른 파일 경로는 Cygwin에 있습니다.윈도우의 경우는c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl)

업데이트: 문제를 "해결"하여 느슨한 물체를 제거합니다.
(git gc호출)git prune, 기본적으로 2주 이상 된 느슨한 개체에 대해서만 해당됩니다.
그러나 OP Michael Donohue가 논평에서 언급한 바와 같이:

저는 2주 동안 느슨한 물체를 주변에 유지하는 안전 측면이 마음에 듭니다. 다시 돌아가서 오래된 개정판을 살펴봐야 해서 이 해결책이 마음에 들지 않습니다.
git의 크기나 성능에 문제가 있는 것은 아니며, 데이터베이스를 압축해도 효과가 없을 것이라고 주장하는 것은 'git gui'일 뿐입니다.


원래 답변:

""의 .git gc" 모든 느슨한 물체를 제거하지 않는 것은 이전에 보고된 적이 있습니다. (2008년 말, """git gc는 더 이상 느슨한 물체를 제거하지 않는 것 같습니다.")

git gc2주 이상 된 느슨한 개체만 제거합니다. 지금 제거하려면 git prune을 실행합니다.
그러나 실행할 때 다른 git 프로세스가 활성화되지 않거나 무언가를 밟을 수 있는지 확인합니다.

"git gc" 에 도달할 수 없게 되어 현재 팩 중인 개체의 포장을 해제합니다.
결과적으로 git 저장소에서 사용하는 디스크 공간의 양은 실제로 다음과 같이 크게 증가할 수 있습니다.git gc" 작업은 파일 시스템에서 거의 완전한 상태로 실행되는 사람에게는 놀랄 수 있습니다. 추적 저장소에서 여러 분기를 삭제한 다음 "를 수행합니다.git gc" 매우 불쾌한 놀라움을 느낄지도 모릅니다.

[예:]이전 분기는 다음과 같은 태그를 통해 예약됩니다.next-20081204.
의 로컬 복사본을 업데이트하는 경우linux-next저장소는 매일 많은 수의 오래된 분기 태그를 축적하게 될 것입니다.
그런 다음 전체 시리즈를 삭제하고 실행하면git-gc, 작업에 상당한 시간이 소요될 것이며, 사용되는 블록과 아이노드의 수가 크게 증가할 것입니다.

그들은 a 후에 사라질 것입니다.git prune", 하지만 제가 이 가사 작업을 할 때, 저는 종종 그들에게--yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repositorygitgc 옵션을 선택합니다.

그래서 당신의 경우에는, "git prune" 도움이 됩니까?

(possibly에서 "now"를 사용하는 경우)gc.pruneexpireconfig variable, 위 동작을 수행하는 데 필요합니다).


(동일한 스레드에서) 다음도 있습니다.

repack -a -d -l

소문자 'a'에 주목합니다.

git-gc호출은 도달할 수 없는 개체의 압축을 푸는 원인이 되는 대문자 'A'로 리팩합니다.작은 'a'는 자신이 무엇을 하고 있는지 알고 도달할 수 없는 물체를 떨어뜨리기를 원하는 사람들을 위한 것입니다.

"Loose Object" 팝업이 뜨면 git의 가비지 컬렉터를 실행할 시간임을 알 수 있습니다.

git gc

그러면 팝업이 사라집니다.

업데이트: (T.E.D.의 제안으로 인해)

아래 루틴을 추출했습니다.git/share/git-gui/lib/database.tcl
필요에 맞게 수정할 수 있습니다.

proc hint_gc {} {
    set object_limit 8
    if {[is_Windows]} {
        set object_limit 1
    }

    set objects_current [llength [glob \
        -directory [gitdir objects 42] \
        -nocomplain \
        -tails \
        -- \
        *]]

    if {$objects_current >= $object_limit} {
        set objects_current [expr {$objects_current * 256}]
        set object_limit    [expr {$object_limit    * 256}]
        if {[ask_popup \
            [mc "This repository currently has approximately %i loose objects.

To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.

Compress the database now?" $objects_current $object_limit]] eq yes} {
            do_gc
        }
    }
}

음..문서에는 그런 것에 대한 명령 줄 논쟁이 보이지 않습니다.

당신은 언제든지 소스를 풀 수 있고, 대화를 위한 코드를 꺼내서 리빌드 할 수 있다고 생각합니다.

답변 및 설명에 추가하기

느슨한 개체를 계속 모니터링하되 팝업이 완전히 사라지지 않도록 하려면(큰 프로젝트의 경우 항상 팝업이 표시됨) 다음 폴더에 있는 database.tcl을 수정할 수 있습니다.

C:\Program Files\Git\mingw64\share\git-gui\lib\

함수 procint_gc {}에서

proc hint_gc {} {

set ndirs 1
set limit 8
if {[is_Windows]} {
    set ndirs 8
    set limit 1
}

변경할 수 있습니다.

set ndirs 8

로.

set ndirs 32

예를들면.

언급URL : https://stackoverflow.com/questions/1106529/how-to-skip-loose-object-popup-when-running-git-gui

반응형