Git GUI가 말하는 "느슨한 개체"는 무엇입니까?


219

Git GUI를 열면 팝업 메시지가 나타납니다 loose objects. 나는 git gc그 메시지를 제거했다.

이 문제가 무엇 loose objects이며 어떻게 다시 발생하지 않도록 할 수 있습니까?


느슨한 개체를 지금 포장해야하는지 묻는 메시지가 나타나면 팝업 메시지에서 "예" 를 클릭 하면됩니다. Git GUIgit gc멋진 GUI 진행 표시 줄과 함께 실행 됩니다 (대부분 붙어있는 것처럼 보이지만).
ADTC

답변:


144

SHA say-810cae53e0f622d6804f063c04a83dbc3a11b7ca가있는 객체 (블롭, 트리 및 커밋)는

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(현재 모든 오브젝트가 동일한 디렉토리에 저장되는 것은 아니므로 파일 시스템의 성능을 향상시키기 위해 처음 두 문자로 분할)

위와 같이 저장된 객체를 느슨한 객체라고합니다.

레포로 시작하면 대부분 느슨한 물건이 있습니다. 숫자가 높을수록 비효율적이며 팩 파일에 저장됩니다. 이러한 객체를 묶음 객체라고합니다.

 git gc

객체를 패킹하기 위해 실행하는 것입니다 (보통 필요하지 않고 몇 주 전의 느슨한 객체도 제거되며 --prune=<date>옵션을 사용하면 더 이상 필요하지 않은 느슨한 객체를 강제로 제거 할 수 있습니다. 커밋을 수정할 때와 동일합니다. 더 오래 필요합니다.)


3
--prune옵션은 기본적으로 활성화되어 git gc있으며 일반적인 사용 (예 :)에 의해 자동으로 트리거 되므로 commit일반적으로 이에 대해 걱정할 필요가 없습니다. git gui를 사용하지 않고 소스에서 트리거 된 위치를 정확하게 찾을 수 없지만 자체 검사를 수행하거나 gc호출 된 명령에 의해 트리거 된 것을 가로 챌 수 있습니다. 그러나 정상적인 사용으로 인해 걱정할 필요는 없습니다.
Cascabel

21
느슨한 물체를 포장하는 데 단점이 있습니까? 그렇지 않다면 Git이 왜 자동으로하지 않습니까?
루이스리스

13
나는 그것이 자동으로 발생하는 것이 사실이라고 생각하지 않습니다. 나는 종종 커밋하지만 언급 된 'git gui'에는 50,000 개의 느슨한 객체가 있었으며 (git이 왜 느려서 4 년 동안 수동 gc없이 큰 프로젝트인지 궁금해했습니다)
Kevin

1
@Kevin git gc수동으로 실행 한 후 대규모 프로젝트의 성능이 향상 되었습니까? 느슨한 객체는 비효율적이며 50,000은 매우 많기 때문에 개선해야한다고 생각합니다. 또한 패킹은 .git폴더가 사용하는 공간을 크게 줄 입니다.
ADTC

3
@LouisRhys, "객체를 디스크에 쓸 때, 그 형식은 액세스 비용이 적게 들기 때문에 종종 느슨한 형식으로되어 있습니다. 그러나 결국 Git Book에서 개체를 포장하여 공간을 절약하고 싶을 것입니다" 아래 답변에
chris

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.