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 сохранил свою метку и хэш из оригинального экспортированного репо.

Другие вопросы по тегам