git fast-import - флаг экспортных марок - PullRequest
3 голосов
/ 27 марта 2011

git fast-import --export-marks может экспортировать файл, связывающий метки с хешами фиксации, которые он создал.

До сих пор я видел, что метки - это не те метки, которые указаны во входных данных.но некоторые "внутренние", не связанные с вводом.

Не было бы намного лучше для взаимодействия импорта / экспорта, если бы он сохранял исходные метки?

1 Ответ

3 голосов
/ 06 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...