
동일한 미러를 설정한 다른 Git Annex 저장소에서 콘텐츠를 복제, 동기화 및 가져올 때 어떻게 확인할 수 있나요?
나는 과거에 파일 간 비교를 수행하는 unison과 같은 도구를 사용했지만 시간과 메모리 집약적입니다.
온전성 검사를 수행할 수 있는 다른 대안이 있습니까? 이에 대한 주된 동기는 기존 저장소의 복제본을 더 작게 만들었다는 것입니다. 이전 저장소에 사용되지 않거나 참조되지 않은 개체가 있기 때문에 더 작을 것으로 예상하지만 크기가 상당히 다릅니다.
그래서 제가 실행할 수 있는 몇 가지 검사를 받고 싶습니다.
답변1
git fsck
Git에는 Git 메타데이터 구조의 일반적인 문제를 지적하는 온전성 검사( )가 내장되어 있습니다 . git gc
매달린 것들과 기타 불필요한 것들을 제거하는 가비지 수집기( )도 있습니다 .
데이터 무결성에 관해서는... 기본적으로 이것은 git에서 제공하는 보증이며, 입력한 데이터는 출력되는 데이터입니다. (또는 마지막 커밋의 해시만이라도) 동일 하다면 git log
데이터도 동일합니다. git의 모든 단계는 데이터, 메타데이터 및 이전 단계에 대해 체크섬됩니다. 데이터가 어디에서나 변경되면 체크섬도 변경되므로 일종의 블록체인과 같습니다. 체크섬이 일치하지 않으면 git은 체크아웃 시 많은 불만을 표시합니다.
git에 대한 Linus Torvalds의 오래된(2007-2008?) 이야기가 있습니다. YouTube에서 IIRC가 데이터 무결성 측면에 대해서도 이야기하는 것을 볼 수 있습니다. 여기에는 몇 가지 문서도 있습니다.https://git-scm.com/book/en/Git-Internals-Git-Objects
실제로 사람들은 git이 마술처럼 처리해주기 때문에 이에 대해 걱정하지 않습니다. 원본을 따라잡기 위해 변경 사항을 끌어오기/푸시/커밋해야 하는지 확인하려면 'git status'를 수행하면 됩니다.
추가 공간 사용에는 다른 이유가 있을 수도 있습니다. git stash
사용한 적이 있다면 공간을 많이 차지할 수 있습니다.
복제된 저장소의 차이점도 여기에 있습니다. git은 커밋되지 않은 로컬 항목에 신경 쓰지 않습니다. 커밋되지 않으면 클론에 관한 한 존재하지 않습니다.
답변2
다음을 수행하여 git annex가 예상대로 작동하는지 확인했습니다.
- .git 콘텐츠를 포함하여 정렬되고 고유한 파일 목록을 얻습니다(이렇게 하면 모든 git 부록 콘텐츠가 있음을 보장합니다)
- .git 콘텐츠를 포함하는 정렬된 고유 링크 목록을 얻습니다(이것은 동일한 저장소 구조를 갖도록 보장합니다).
- 파일 목록을 비교하고, 부속서/전송 디렉토리를 무시하고, git 객체는 다를 수 있으며, git 부속서 내용은 동일해야 합니다.
- 비교 링크 목록은 동일해야 합니다.
- git annex fsck를 실행하거나 모든 파일의 체크섬을 비교합니다(이것은 파일 시스템 문제입니다).
이것은 효과가 있지만 약간의 노동/시간 집약적일 수 있습니다. 또한 부분 복사본만 있는 미러를 사용하면 프로세스가 더욱 복잡해질 수 있습니다. 이러한 미러의 경우 보유할 것으로 예상되는 콘텐츠만 비교하면 됩니다.