Целью пометок , экспортируемых по fast-import
, является перечисление коммитов и BLOB-объектов для последующей проверки и синхронизации. Цель отметок , импортированных на fast-import
, состоит в том, чтобы пропустить фиксации в сценарии добавочного экспорта-импорта.
╔════════════════╦══════════════════════════════════╗
║ ║ git fast-export ║
╠════════════════╬══════════════════════════════════╣
║ --import-marks ║ 1) commits to skip during export ║
║ --export-marks ║ 2) exported commits ║
╚════════════════╩══════════════════════════════════╝
╔════════════════╦══════════════════════════════════════╗
║ ║ git fast-import ║
╠════════════════╬══════════════════════════════════════╣
║ --import-marks ║ 3) commits to skip during import ║
║ --export-marks ║ 4) a) blobs ║
║ ║ b) imported commits, same as (2) ║
╚════════════════╩══════════════════════════════════════╝
Из приведенных выше таблиц видно, как флаги можно комбинировать в сценарии, в котором репозитории синхронизируются по шагам. Можно экспортировать репозиторий, импортировать его в другое место, а затем либо создавать файлы инкрементального экспорта, пропуская ранее экспортированные коммиты, либо создавать полные экспорты и инкрементный импорт, пропуская уже известные коммиты.
Вот короткий пример для пояснения.
$ cd /tmp && git init example && cd example && touch README && \
git add README && git commit -m "first commit"
$ git fast-export --all --export-marks=/tmp/example-repo.marks > /tmp/example-repo.export
--- /tmp/example-repo.export ---
blob
mark :1
...
reset refs/heads/master
commit refs/heads/master
mark :2
...
reset refs/heads/master
from :2
--- /tmp/example-repo.marks ---
:2 610432e74c554d783ff5f9edd1bb18548d68e533
Экспортирована только одна отметка, отметка за одну фиксацию добавлена в репо.
$ git show 610432e74c554d783ff5f9edd1bb18548d68e533
commit 610432e74c554d783ff5f9edd1bb18548d68e533
...
Когда вы продолжите воссоздание хранилища, экспортированные метки будут содержать список не только коммитов, но и новых BLOB-объектов. Эти новые BLOB-объекты были воссозданы и присутствуют в метках, которые вы можете проверить, также указаны коммиты для сравнения со всеми коммитами, на которые ссылается импорт.
$ cd /tmp && git init example-import && cd example-import && \
cat /tmp/example-repo.export | git fast-import --export-marks=/tmp/example-import-repo.marks
--- /tmp/example-import-repo.marks ---
:1 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
:2 610432e74c554d783ff5f9edd1bb18548d68e533
BLOB-объект :1
был воссоздан и вновь указан в файле меток (с использованием первой доступной метки, которая оказывается :1
), но обратите внимание, что помеченный коммит :2
сохранил свою метку и свой хэш исходный экспортный репо.