git annex - 2개의 저장소가 정확히 동일한지 확인하는 방법

git annex - 2개의 저장소가 정확히 동일한지 확인하는 방법

동일한 미러를 설정한 다른 Git Annex 저장소에서 콘텐츠를 복제, 동기화 및 가져올 때 어떻게 확인할 수 있나요?

나는 과거에 파일 간 비교를 수행하는 unison과 같은 도구를 사용했지만 시간과 메모리 집약적입니다.

온전성 검사를 수행할 수 있는 다른 대안이 있습니까? 이에 대한 주된 동기는 기존 저장소의 복제본을 더 작게 만들었다는 것입니다. 이전 저장소에 사용되지 않거나 참조되지 않은 개체가 있기 때문에 더 작을 것으로 예상하지만 크기가 상당히 다릅니다.

그래서 제가 실행할 수 있는 몇 가지 검사를 받고 싶습니다.

답변1

git fsckGit에는 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가 예상대로 작동하는지 확인했습니다.

  1. .git 콘텐츠를 포함하여 정렬되고 고유한 파일 목록을 얻습니다(이렇게 하면 모든 git 부록 콘텐츠가 있음을 보장합니다)
  2. .git 콘텐츠를 포함하는 정렬된 고유 링크 목록을 얻습니다(이것은 동일한 저장소 구조를 갖도록 보장합니다).
  3. 파일 목록을 비교하고, 부속서/전송 디렉토리를 무시하고, git 객체는 다를 수 있으며, git 부속서 내용은 동일해야 합니다.
  4. 비교 링크 목록은 동일해야 합니다.
  5. git annex fsck를 실행하거나 모든 파일의 체크섬을 비교합니다(이것은 파일 시스템 문제입니다).

이것은 효과가 있지만 약간의 노동/시간 집약적일 수 있습니다. 또한 부분 복사본만 있는 미러를 사용하면 프로세스가 더욱 복잡해질 수 있습니다. 이러한 미러의 경우 보유할 것으로 예상되는 콘텐츠만 비교하면 됩니다.

관련 정보