Я вижу команду «тянуть» и задаюсь вопросом, чем она отличается от «клона». Оба термина, похоже, подразумевают получение кода из некоторого удаленного репозитория. Есть ли здесь какое-то тонкое различие?
Является ли «тянуть» синонимом слова «клон» в репозитории системы управления версиями Mercurial?
Ответы (3)
hg clone
- это способ создания локальной копии удаленного репозитория. Эквивалент Subversion - svn checkout
.
hg pull
извлекает изменения из другого репозитория. hg update
применяет эти изменения к локальному репозиторию. hg pull -u
эквивалентно hg pull; hg update
. В Subversion, эквивалентном hg pull -u
, является svn update
.
Используйте clone, когда вам нужно создать новый репозиторий на основе другого. Позже используйте pull, чтобы перенести новые наборы изменений в клон. Вы не можете использовать clone для получения только новейших ревизий - для этого и нужен pull. Команда pull сравнит два репозитория, найдет недостающие ревизии в вашем репозитории и, наконец, перенесет их.
Однако вы правы в том, что между clone и pull есть общие черты: они оба передают историю между репозиториями. Если вы сначала клонируете
hg clone https://www.mercurial-scm.org/repo/hg/
тогда это имеет тот же эффект, что и выполнение
hg init hg
cd hg
hg pull https://www.mercurial-scm.org/repo/hg/
hg update
В обоих случаях вы получите одинаковую историю. Однако команда clone более удобна, поскольку она также редактирует файл .hg/hgrc
, чтобы вы могли установить путь по умолчанию:
[paths]
default = https://www.mercurial-scm.org/repo/hg/
Это то, что позволяет вам делать hg pull
в репозитории без указания URL. Еще одно преимущество использования клона заключается в том, что вы работаете с репозиториями на одном диске: hg clone a b
будет очень быстрым и дешевым с точки зрения дискового пространства, поскольку b
будет делиться историей с a
. Это делается с использованием жестких ссылок и работает на всех платформах (Windows, Linux, Mac).
clone создает новый репозиторий как копию существующего репозитория.
pull импортирует все наборы изменений (еще не существующие) из другого репозитория в существующий репозиторий.