etckeeper와 git, 거대한 창고를 처리하는 방법

etckeeper와 git, 거대한 창고를 처리하는 방법

/etc/.git/최근에 디스크 공간이 약 30G에 이르렀다는 사실을 발견했습니다 . ]. 이 저장소는 etckeepergit에만 사용됩니다.

나는 두 가지 해결책을 생각해 냈습니다.

  1. 당연합니다. 오래된 커밋(1년 이상)을 삭제하세요. 그러나 bcommit이 어떤 방식으로든 종속될 가능성이 있습니까?
  2. 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 저장소를 다시 작성하여 이러한 대용량 파일을 제거하는 것입니다. 이 작업은 두 단계로 수행됩니다.

  1. 대용량 파일을 식별합니다.
  2. 이러한 파일을 제거하려면 저장소를 다시 작성하십시오.

저장소의 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에는 거대한 .git 저장소가 있는데 어떻게 삭제하나요? ? ?

관리자가 수락한 답변:"실행: 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또한 귀하의 필요에 맞게 사용자 정의 할 수도 있습니다 . 유용하고 정확한 답변에 감사드립니다.

관련 정보