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