Я читал о субрепозиториях и о том, как извлечь существующую папку из репозитория Mercurial в субрепозитор, используя расширение конвертации и файл. Я могу это сделать. Если у меня есть следующая структура папок:
C:\Project
---Project\root.txt
---Project\SubFolder
---Project\SubFolder\fileinsubfolder.txt
Я могу сделать субрепозитор SubFolder. Точно так же я могу извлечь все остальное из отдельного репозитория (в этом примере во втором репозитории будет только файл root.txt). Впоследствии я могу добавить репозиторий SubFolder в качестве вспомогательного хранилища во второй репозиторий. Но хотя оба хранилища имеют полную историю, эти истории не связаны = > обновление корневого репозитория до более раннего состояния не будет помещать субрепозитор в состояние, в котором он должен находиться в этой точке. Обновление до согласованной старой версии (как root, так и Subrepo обновляется автоматически) будет работать только при обновлении до версии, которая уже знает о субрепозитории и имеет файл .hgsubstate.
И альтернатива, о которой я думал, это просто забыть файлы в SubFolder в текущем репозитории и инициализировать новый репозиторий в SubFolder и в то же время добавить файл .hgsub. То, что я надеюсь достичь здесь, - это работа с этого момента с помощью субрепозитория, но у меня есть способ обновить до более старой версии (до разделения подрепо), потому что файлы SubFolder все еще находятся в истории текущего репозитория.
Это не работает: если я забыл файлы в mercurial, запустил новое репо и связал его как подрепо в текущем репо, и я обновляю до более старой версии до того, как существовал подпорок. Я получаю эту ошибку:
C:\Project>hg update 1
abort: path 'SubFolder\fileinsubfolder.txt' is inside repo 'SubFolder'
Проблема заключается в том, что при обновлении до более старой версии, которая не была осведомлена о подрепоре, это обновление хочет помещать файлы в SubFolder. Но этот SubFolder является еще одним репо (имеет каталог .hg), и хотя в основном репо нет воспоминаний об этом, обновление не хочет помещать файлы в SubFolder, поскольку это репо.
Есть ли способ обойти эту ошибку или есть лучший способ переключиться на использование подрепортажа для определенной папки в существующем хранилище Mercurial и сохранить историю неповрежденной (и обе истории связаны)?