Есть ли способ добавить историю в файл в Mercurial? - PullRequest
0 голосов
/ 04 сентября 2018

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

Вопрос : Можно ли экспортировать историю отдельных файлов и импортировать ее в другое хранилище, где этот файл уже доступен?

Возможно, помогает то, что требуется только основная ветка.

Иллюстрация: Текущая ситуация

Old Repo                                         Repo "New

          /--> V2---\    << not required
         /           \
V0 --> V1 ---> V3 --> V4  << required            V5 --> V6 ...

Иллюстрация: идеальная ситуация

New Repo

V0 --> V1 --> V3 --> V4 --> V5 --> V6 ...

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Да, вы, вероятно, можете достичь своей цели, используя hg convert и хотя бы его параметр --filemap.

Когда вы настраиваете новый репозиторий, вы МОЖЕТЕ изменить его историю, по крайней мере, до того, как он будет передан кому-либо еще. Кроме того, вы можете использовать модифицированную производную вашего оригинала в качестве основы для слияния с вашей новой.

Подход должен состоять в том, чтобы convert превратить ваш старый репозиторий в новый, в котором осталась только история одного конкретного файла. Затем вы можете извлечь из преобразованного хранилища новое (см. извлечение из несвязанного ).

(В зависимости от вашей схемы ветвления вы также можете использовать процедуру преобразования с --branchmap, чтобы поместить историю вашего важного файла в отдельную ветвь. Это может помочь идентифицировать эти исторические изменения позже. Если это так, то один раз вы объединили репозитории, которые вы можете просто объединить в одну ветку.)

При использовании convert я бы порекомендовал выполнять разные шаги (карта файлов, карта ветвления и т. Д.) Как отдельные отдельные «проходы». Каждый из них создаст новый временный репозиторий. Это делает каждый шаг простым и понятным.

0 голосов
/ 05 сентября 2018

Короткий ответ - нет.

Более длинный ответ все еще нет, но с причиной. :-) Mercurial только когда-либо добавляет в хранилище, как физически, так и логически, так что ваши стрелки нарисованы назад (или, скорее, не нарисованы назад, но они должны быть назад). Поскольку у вас уже есть V6, ведущая обратно к V5, что приводит к тому, что «ничего не приходит раньше», все, что вы добавите, будет V7 или более поздним, ведущим к V6.

То, что вы можете сделать, - это создать еще один новый репозиторий, в котором вы копируете и фиксируете V0, затем копируете и фиксируете V1 и так далее, пока не достигнете V6. Это дает вам новую серию коммитов с желаемой историей. Пусть все переключатся на новый новый репо, и все готово. Откуда это больно (и насколько больно) в основном зависит от того, как недавно вы уже перешли один раз.

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