git Annex - как проверить, что 2 репозитория абсолютно идентичны

git Annex - как проверить, что 2 репозитория абсолютно идентичны

Как я могу гарантировать, что при клонировании, синхронизации и получении контента из другого репозитория git Annex я настрою идентичное зеркало?

Раньше я использовал такой инструмент, как Unison, который сравнивал файлы, но это отнимало много времени и памяти.

Есть ли другие альтернативы, чтобы я мог выполнить проверку работоспособности? Основная причина этого в том, что я только что сделал клон существующего репозитория, он меньше. Я ожидаю, что он будет меньше, потому что в старом репозитории есть неиспользуемые или неиспользуемые объекты, но он довольно сильно отличается по размеру.

Итак, я хотел бы получить чек, который я могу провести.

решение1

В Git есть встроенная проверка работоспособности ( git fsck), которая укажет на общие проблемы со структурой метаданных git. Также есть сборщик мусора ( git gc), который удалит висячие и другие ненужные вещи.

Что касается целостности данных... в основном это гарантия, предоставляемая git, данные, которые вы вводите, являются данными, которые вы получаете. Если git log(или даже просто хэш последнего коммита) идентичны, то и данные тоже. Каждый шаг в git проверяется контрольной суммой, по данным, метаданным и предыдущим; это своего рода блокчейн, если данные где-то изменились, то и контрольные суммы тоже изменятся. Если контрольные суммы не совпадут, git будет много жаловаться при оформлении заказа.

Есть старый (2007-2008?) доклад Линуса Торвальдса о git, который можно посмотреть на Youtube, где он также говорит о целостности данных. Также есть некоторая документация здесь:https://git-scm.com/book/en/Git-Internals-Git-Objects

На практике люди просто не беспокоятся об этом, так как git волшебным образом заботится об этом. Вы просто делаете 'git status', чтобы увидеть, нужно ли вам pull/push/commit изменений, чтобы идти в ногу с источником.

Дополнительное использование пространства может иметь и другие причины... git stashможет быть пожирателем пространства, если вы когда-либо им пользовались.

Вот где также есть различия в клонированных репозиториях: git не заботится о локальных вещах, которые никогда не были закоммичены. Если они не закоммичены, то они не существуют с точки зрения клонов.

решение2

Я проверил, что git Annex работает так, как и ожидалось, выполнив следующие действия:

  1. получить отсортированный, уникальный список файлов, включая содержимое .git (это гарантирует, что у нас есть все содержимое приложения git)
  2. получить отсортированный, уникальный список ссылок, включая содержимое .git (это гарантирует, что у нас будет одинаковая структура репозитория)
  3. сравнить списки файлов, игнорировать каталог Annex/Transfer, объекты git могут отличаться, содержимое git Annex должно быть идентичным
  4. сравните списки ссылок, они должны быть идентичны
  5. запустите git Annex fsck или сравните контрольную сумму всех файлов (это проблема файловой системы)

Это работает, но может быть немного трудоемким / времязатратным. Кроме того, процесс может быть еще более усложнен, если есть зеркала, которые являются лишь частичными копиями. Для этих зеркал вам нужно сравнивать только тот контент, который вы ожидаете получить.

Связанный контент