git fast-import commit order

Я пишу пакет быстрого экспорта / быстрого импорта для Plastic SCM/ Git и нахожу некоторые проблемы.

Как я прочитал из документации:

Такая конструкция позволяет программе внешнего интерфейса одновременно обрабатывать неограниченное количество ветвей, генерируя коммиты в порядке, в котором они доступны из исходных данных.

Но, реализуя "экспортер", я вижу, что вы не можете ссылаться на коммит, который еще не был создан. Например, предположим, что вы вводите сначала назначение фиксации слияния, а не источник, а затем просто ссылаетесь на источник, но он просто не работает.

Итак, насколько я понимаю, предложение "генерация коммитов в том порядке, в котором они доступны из источника" просто неверно, и git fast-import действительно требует, чтобы коммиты были предоставлены в порядке, а ссылки могут существовать только для объектов, введенных ДО.

Это правильно?

Благодарю.

1 ответ

Да, git-fast-import Нужно видеть коммиты для каждой ветки в порядке от самого старого до самого нового. Утверждение, которое вы цитировали из документации, несколько двусмысленно, потому что "порядок, в котором они доступны из исходных данных", фактически должен увеличивать порядок времени для каждой ветви.

Я думаю, что это утверждение означает, что вам не нужно представлять все коммиты по всем ветвям в строго хронологическом порядке. Скорее, как и при обычной работе с Git, каждый коммит должен быть создан после того, как все его предки были созданы.

Этот подход все еще оставляет некоторую гибкость в том, как коммиты могут быть импортированы. Я написал импортер (для старой проприетарной системы контроля версий), который обрабатывал всю ветвь в отдельности (конечно, от самой старой до самой новой). Git сопоставил общих предков между различными ветвями и создал хорошее разумное иерархическое дерево, потому что хеш-коды общих предков SHA1 в каждой ветви были одинаковыми.

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