git 附件 - 如何驗證 2 個儲存庫完全相同
當我從另一個 git 附件儲存庫複製、同步和獲取內容時,如何確保我設置了相同的鏡像?
過去我使用過類似 unison 的工具,它可以進行文件與文件的比較,但這是時間和記憶體密集型的。
是否有任何其他選擇,以便我可以進行健全性檢查?這樣做的主要動機是我只是複製了一個較小的現有儲存庫。我希望它更小,因為舊儲存庫有未使用或未引用的對象,但它的大小有很大不同。
所以,我想要一些我可以執行的檢查。
我通過執行以下操作驗證了 git 附件按預期工作:
- 獲得一個排序的、唯一的文件列表,包括 .git 內容(這確保我們擁有所有 git 附件內容)
- 獲得一個排序的、唯一的連結列表,包括 .git 內容(這確保我們有相同的儲存庫結構)
- 比較文件列表,忽略附件/傳輸目錄,git對象可能不同,git附件內容應該相同
- 比較連結列表,應該相同
- 執行 git Annex fsck 或比較所有文件的校驗和(這是文件系統問題)
這可行,但可能有點費力/時間密集。此外,通過使用僅是部分副本的鏡像,該過程可能會進一步複雜化。對於這些鏡像,您只需比較您期望擁有的內容。
Git 有一個內置的完整性檢查 (
git fsck
),它會指出 git 元資料結構的一般問題。還有一個垃圾收集器 (git gc
) 可以刪除懸空和其他多餘的東西。至於數據完整性……基本上這是git提供的保證,你輸入的數據就是你輸出的數據。如果
git log
(甚至只是最後一次送出的雜湊)相同,那麼數據也是如此。git 中的每一步都根據數據、元數據和以前的數據進行校驗和;它有點像區塊鏈,如果數據在任何地方發生變化,那麼校驗和也會發生變化。如果校驗和不匹配,git 會在結賬時抱怨很多。有一個舊的(2007-2008 年?)關於 git 的 Linus Torvalds 談話,你可以在 Youtube 上觀看 IIRC,他還談到了事情的數據完整性方面。這裡還有一些文件:https ://git-scm.com/book/en/Git-Internals-Git-Objects
在實踐中,人們並不擔心這一點,因為 git 神奇地處理了它。您只需執行“git status”即可查看是否必須拉/推/送出更改以跟上原點。
額外的空間使用也可能有其他原因……
git stash
如果您曾經使用過它,可能會佔用空間。這也是您在複製儲存庫中存在差異的地方:git 不關心從未送出的本地內容。如果沒有送出,就複製而言,它不存在。