Подтвердить что ты не робот

Mercurial `hg clone`, но игнорируя все subrepos?

Есть ли способ клонировать репо, которое поставляется с subrepos, но без того, чтобы Mercurial вытащил все подпоры?

Похоже, что в то время как hg clone -U можно использовать для получения пустого клона репо, то ничего, что могло бы убедить hg update избежать начала, потянув все подпоры.

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

4b9b3361

Ответ 1

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

Шаг 1: клонирование репозитория без каких-либо обновлений

hg clone --noupdate source_repository destination_repository

Шаг 2: используйте возврат, чтобы получить нужные файлы.

hg revert --all --rev revision_number --exclude subrepo_1 --exclude subrepo_2 ...

На этом этапе у вас есть новый набор изменений; вам может потребоваться убедиться, что родительская ревизия верна. Когда я это сделал, моим новым родителем changeet был changeet 0. Чтобы исправить это, мне пришлось установить родительский набор изменений и ветки switch (так как мой набор изменений находился в другой ветке).

Шаг 3: Измените родительский элемент текущих изменений

hg debugsetparents revision_number
hg branch branch_name

Это должно сделать это.

Ответ 2

Это должно делать то, что вы хотите:

REM Take a new clone, but do not update working directory
hg clone --noupdate %REPO_PATH% %DESTINATION%

REM Update working directory but exclude the certain subprojects
hg revert --all --rev %BRANCH% --exclude %SUBREPO_PATH_1% --exclude %SUBREPO_PATH_2%

Ответ 3

Нашел хакерский путь. Он по-прежнему требует, чтобы все subrepos были проверены один раз, но впоследствии их можно удалить.

  • Клонировать всю лот, включая subrepos. Ни в коем случае.
  • Удалить subrepos
  • hg remove .hgsub

Я пытался убедить Mercurial hg remove .hgsub перед клонированием subrepos, но лучшее, что я получил, это not removing .hgsub: file is untracked.

Ответ 4

Если у вас есть subrepo, рабочий каталог должен включать некоторую версию этого подрепортажа. Эта версия может быть фиксированной старой версией, если она указана, или подсказкой, если нет.

Вы не можете обновить свое репо, не получив subrepos; если у вас был полный рабочий каталог без них, вы не должны использовать subrepos - вместо этого используйте действительно внешние репозитории.

Если ваш subrepos привязан к определенной удаленной версии, то обновления после первого не будут вызывать обновление подрепортажа - они уже обновлены. Но для первоначального создания рабочего каталога вам придется делать удаленное нажатие.

Вы можете обмануть Mercurial, запустив файл hgsubstate. Но на самом деле, ваша модель и концептуальная модель отличаются друг от друга, поэтому вы, вероятно, не очень хорошо разбираетесь в subrepos, если это вызывает беспокойство.

edit: Если вы обнаружите, что клонирование, а затем обновление до конца много раз, попробуйте вместо этого использовать локальные ветки или mq. Таким образом, вам нужно только выполнить начальный клон один раз.