/etc/.git/
최근에 디스크 공간이 약 30G에 이르렀다는 사실을 발견했습니다 . ]. 이 저장소는 etckeeper
git에만 사용됩니다.
나는 두 가지 해결책을 생각해 냈습니다.
- 당연합니다. 오래된 커밋(1년 이상)을 삭제하세요. 그러나 bcommit이 어떤 방식으로든 종속될 가능성이 있습니까?
git gc
또 다른 것입니다. 나는 이전에 이것을 해본 적이 없으며 그것에 대해 읽기만 했습니다git help gc
. 이 명령의 사용이 권장된다고 합니다. 내가 아는 한, 내부 구조(및 일부 가비지 수집)만 변경 및 복제되고 커밋 및 커밋은 변경 없이 계속 이루어질 수 있으며 데이터는 영향을 받지 않습니다.
이 상황에서 좋은 습관은 무엇입니까?
답변1
git gc
더 이상 액세스할 수 없는 개체를 삭제하는 것이 아이디어 입니다. 단지 커밋을 추가하는 것이므로 etckeeper
별 도움이 되지 않을 것입니다. 하지만 아프지는 않습니다. 다시 포장하면 약간의 공간을 절약할 수 있습니다.
/etc/
과거에 거대한 파일을 가지고 있었을 수도 있고 지금은 git 기록에 여전히 남아 있습니다. 아니면 모든 자식 기록을 버리세요. (/etc/인 경우 옵션일 수 있습니다.) 또는 기록에서 대용량 파일을 삭제해 보세요. 보세요BFG 레포 클리너.
답변2
저장소에는 기록의 일부 대용량 파일이 포함될 수 있습니다. du -hs
출력을 부탁드려도 될까요? 이렇게 하면 해당 파일이 현재 디렉터리에 있고 따라서 gitkeeper git 저장소의 HEAD에 있는지 여부가 명확해집니다 /etc
. /etc
보다 대화형 접근 방식은 편리한 도구를 사용하는 것입니다 ncdu
. 현재 디렉터리에 불필요한 대용량 파일이 있으면 /etc
직접 삭제하면 됩니다. 그러나 이 답변의 나머지 부분에서는 대부분 현재 디렉토리가 아닌 기록에 있다고 가정하겠습니다 /etc
.
한 가지 옵션은 git 저장소를 다시 작성하여 이러한 대용량 파일을 제거하는 것입니다. 이 작업은 두 단계로 수행됩니다.
- 대용량 파일을 식별합니다.
- 이러한 파일을 제거하려면 저장소를 다시 작성하십시오.
저장소의 HEAD는 변경되지 않은 상태로 유지되므로 디렉터리 /etc
는 영향을 받지 않습니다.
나는 최근에 (내 자신이 아닌) git 저장소에서 주변적으로 작업했습니다. 더 자세한 내용을 원하시면 제가 파헤쳐 볼 수 있습니다. 그러나 거기에서 사용되는 방법은 매우 수동적이고 DIY입니다. 저를 포함해 관련된 사람 중 누구도 git 전문가가 아니었습니다. 따라서 이 작업을 자동으로 수행할 수 있는 기존 도구가 있으면 더 좋을 수도 있습니다.
답변3
거대한 저장소는 /etc/.git에 있습니다. 해당 기록을 유지할 필요가 없으면 다음을 수행하여 git 저장소를 완전히 삭제할 수 있습니다.
1).git 디렉토리를 수동으로 삭제하려면 "rm -rf .git"을 사용하십시오.- 공간이 부족한 비상옵션인 것 같아요. etckeeper가 이상한지 뭔지는 모르겠지만, 이렇게 하면 확실히 문제가 해결될 것입니다. 스택 오버플로 참조:https://stackoverflow.com/questions/1213430/how-to-complete-delete-a-git-repository-created-with-init
2)또 다른 옵션은 etckeeper 자체를 사용하여 동일한 작업을 수행하는 것입니다.. etckeeper 웹사이트에서:
"이 저장소에 기록된 기록을 보관해야 합니까, 아니면 삭제하고 현재 /etc를 새 VCS로 확인할 수 있습니까?
후자의 경우 다음 세 단계만 수행하면 됩니다.
etckeeper UNIT # /etc/.git을 삭제하세요!
vim /etc/etckeeper/etckeeper.conf
etckeeper 초기화
인용하다:https://github.com/joeyh/etckeeper
VCS를 변경하기 위해 etckeeper.conf 파일을 편집할 필요는 없습니다. etckeeper VCS를 그대로 두고 "etckeeper init"을 수행하면 git 및 /etc 디렉토리의 현재 상태를 사용하여 새 저장소가 시작됩니다.
Turnkey Linux의 또 다른 참고 자료는 다음과 같습니다.
관리자가 수락한 답변:"실행: etckeeper uninit -f; etckeeper init"
공간이 부족해요. 방금 위 단계를 수행하고 원하지 않는 기록 15GB를 삭제했습니다. /etc 디렉토리를 지속적으로 모니터링하는 데에는 etckeeper가 훌륭하다고 생각하지만 2년의 기록은 필요하지 않습니다.
답변4
이 문제의 원인이 무엇인지 알고 있습니다. SAMBA4/AD ldb가 있는 것으로 나타났습니다 /etc/
. 파일 크기는 약 500MB이며 데이터베이스의 내용이 변경되면 git은 전체 파일의 스냅샷을 찍습니다. 창고는 1년정도 되어서 사이즈 딱 맞네요 ;)
유용한 팁들:
- Git 저장소는 독립적이므로 간단한
cp -r
(scp
, ... )이 작동합니다. - Git은 내부적으로 (대부분) 덩어리이므로 압축은 별로 도움이 되지 않습니다.
git gc
사용할 수 없는 개체를 확인하고 때로는 내용을 압축하기도 하지만 앞서 언급한 점으로 인해 디스크 공간 절약에는 그다지 효과적이지 않습니다.
따라서 해결책은 저장소(아카이브 또는 clone
최신 버전)를 백업한 다음 삭제하고 다음을 호출하는 것입니다 /etc/
.
etckeeper init
etckeeper commit "First message in new repo."
.gitignore
또한 귀하의 필요에 맞게 사용자 정의 할 수도 있습니다 . 유용하고 정확한 답변에 감사드립니다.