Является ли hg клон эквивалентным hg (init → pull) - PullRequest
3 голосов
/ 04 августа 2011

На работе я использую репозиторий svn, общий для 7 человек.

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

Я выполняю локальные коммиты на hg во время работы, и, поскольку у меня все это настроено на виртуальной машине, я даже помещаю свой hg репозиторий в частное централизованное расположение.

Недавно я перешел на Mac OS X lion, который сломал мою виртуальную машину, поэтому мне пришлось настроить ее заново. Поэтому я извлек проект из моего svn trunk и теперь хочу вернуть наборы изменений hg в каталог, над которым я работал.

У меня есть два варианта:

  • $ hg clone <remote repo>
  • $ hg init && hg pull <remote repo>

Это эквивалент?

Ответы [ 2 ]

14 голосов
/ 04 августа 2011

Разница лишь в том, что если вы запускаете hg init && hg pull <remote>, то вы также должны:

  1. Запустите hg update default, чтобы оформить рабочую копию
  2. Вручную установите путь по умолчанию для push и pull

hg clone делает все это одной командой.

4 голосов
/ 05 августа 2011

Ну, да и нет.

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

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

Так что в этом отношении, да, эти двое, похоже, делают одно и то же.

Однако они делают это по-разному.

Есливы делаете это:

hg clone REMOTE_URL
hg init && hg pull REMOTE_URL

Тогда реальной разницы нет.

Однако, если вы сделаете это:

hg clone LOCAL_PATH
hg init && hg pull LOCAL_PATH

(обратите внимание, этот клон/ pull из другого репозитория уже на вашем диске)

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

Затем,когда вы начнете изменять историю, т.е.При внесении новых наборов изменений эти файлы становятся несвязанными и делаются полными копиями по требованию.

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

Вытягивание не сделает этого.Он будет читать из другого хранилища и создавать / обновлять новые файлы в целевом хранилище.Это занимает больше времени и больше дискового пространства.

Итак, подведем итог:

  • hg clone LOCAL_PATH может использовать намного меньше дискового пространства и работать намного быстрее, чем hg init && hg pull LOCAL_PATH
  • Если вы клонируете / извлекаете данные из удаленного хранилища, реальной разницы нет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...