Mercurial CLONE с PULL в репозитории с вложенными репозиториями не создает полностью независимый репозиторий

У меня есть репозиторий оболочки OriginalWithSubrepo с подрепозиторием Sub, содержащим кучу реальных файлов.

Когда я клонирую OriginalWithSubrepo вот так

hg clone --pull --noupdate "C:\TestRepo\OriginalWithSubrepo" "C:\TestRepo\OriginalWithSubrepo-clone"

Созданный таким образом клон содержит всего несколько служебных файлов, фактических данных из исходного каталога Sub\.hg нет. Я не знаю, что означают эти файлы, но, по-видимому, их достаточно для воссоздания репозитория, потому что, когда я обновляю рабочий каталог в клоне, все это заполняется всеми файлами, в том числе внутри каталога Sub\.hg. Однако, если я клонирую, затем переименовываю оригинал, а затем пытаюсь обновить клон, он не работает, говоря, что OriginalWithSubrepo не найден, что означает, что все основано на ссылках на оригинал.

Эта проблема не возникает, когда я запускаю клонирование с обновлением или когда я клонирую репозиторий без вложенных репозиториев.

Он ведет себя так же, когда я клонирую в сетевой ресурс, где я действительно хочу, чтобы он работал.

Итак, как мне сделать полностью независимый клон репозитория с подрепозиториями (без одновременного обновления)?

Windows XP, хг версия 3.4.1


person Igor Ivanov    schedule 13.07.2015    source источник


Ответы (1)


Когда вы добавляете первый вложенный репозиторий в родительский репозиторий, .hgsub добавляется в родительский репозиторий. Подрепозиторий становится подрепозиторием только из набора изменений, который фиксирует .hgsub.

Когда вы выполняете hg clone --noupdate --pull parent parent-clone, parent-clone еще не находится ни в одном наборе изменений, и, следовательно, еще не в наборе изменений, в котором было создано подрепозиторий.

Итак, как мне сделать полностью независимый клон репозитория с подрепозиториями (без одновременного обновления)?

Я не думаю, что вы можете сделать это как таковое.

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

  1. Создайте репозитории на сетевом ресурсе для вашего родителя и подчиненных \\fileserver\repos\OriginalWithSub\ и \\fileserver\repos\Sub\
  2. Измените свой локальный файл OriginalWithSub .hgsub, установите удаленный путь как \\fileserver\repos\Sub\ и зафиксируйте.
  3. переместите свои локальные репозитории в соответствующие им сетевые ресурсы.

Оба репозитория теперь существуют в общем сетевом ресурсе, без видимых файлов, кроме .hg внутри, и вы можете клонировать \\fileserver\repos\OriginalWithSub\ (с обновлением) с другого компьютера и получить полную историю как OriginalWithSub, так и Sub.

person Sigve Kolbeinson    schedule 24.07.2015