git fast-import - флаг экспортных марок
git fast-import --export-marks может экспортировать файл, связывающий метки с хешами коммитов, которые он создал.
До сих пор я видел, что метки - это не те, которые указаны на входе, а некоторые "внутренние", не связанные с вводом.
Разве не будет намного лучше для взаимодействия импорта / экспорта, если он сохранит исходные метки?
1 ответ
Назначение марок, экспортируемых fast-import
список коммитов и BLOB-объектов для последующей проверки и синхронизации. Назначение марок, импортируемых fast-import
является пропуск коммитов в сценарии инкрементного экспорта-импорта.
╔════════════════╦════════════════════════════════ ══╗ Fast ║ git fast-export fast ╠════════════════╬══════════════════════════════════╣ Imp - import-mark ║ 1) фиксирует пропуск во время экспорта ║ ║ --экспорт-метки ║ 2) экспортированные коммиты ║ ╚════════════════╩══════════════════════════════════╝ ╔════════════════╦══════════════════════════════════════╗ Fast ║ git fast-import ║ ╠════════════════╬══════════════════════════════════════╣ Imp - импорт-метки ║ 3) фиксирует пропуск во время импорта ║ ║ - экспортные марки ║ 4) а) капли ║ ║ ║ б) импортированные коммиты, такие же как (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
Капля :1
был воссоздан и вновь указан в файле меток (с использованием первой доступной метки, которая оказывается :1
), но учтите, что отмеченный коммит :2
сохранил свою метку и хэш из оригинального экспортированного репо.