Mercurial `hg clone`, но игнорирует все подпункты? - PullRequest
22 голосов
/ 09 августа 2010

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

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

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

Ответы [ 4 ]

13 голосов
/ 13 декабря 2012

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

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%
8 голосов
/ 09 декабря 2014

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

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

hg clone --noupdate source_repository destination_repository

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

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

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

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

hg debugsetparents revision_number
hg branch branch_name

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

5 голосов
/ 10 августа 2010

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

  1. Клонировать весь лот, включая подпункты.Обойти это невозможно.
  2. Удалить подпункты
  3. hg remove .hgsub

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

3 голосов
/ 09 августа 2010

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

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

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

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

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

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