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


219

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

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


느슨한 개체를 지금 포장해야하는지 묻는 메시지가 나타나면 팝업 메시지에서 "예" 를 클릭 하면됩니다. Git GUI 는 git 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.