IMO share
- очень полезная команда , которая в некоторых случаях имеет некоторые большие преимущества перед clone
.Но я думаю, что, к сожалению, во многих случаях это упускается из виду.
Что share
делает , это повторно использует «хранилище» информации контроля версий Mercurial между несколькими локальными хранилищами.(Он не имеет прямого отношения к ветвлению.)
«Хранилище» - это набор файлов, представляющих всю историю, которую Mercurial сохраняет для вас.Вы не взаимодействуете с этим напрямую.Это черный ящик в 99,99% случаев.
share
отличается от более часто используемой команды clone
тем, что clone
будет копировать хранилище информации, что потребует больше времени для запуска и использованияпотенциально намного больше дискового пространства.
«Побочным эффектом» использования share
вместо clone
является то, что вы мгновенно увидите все те же коммиты в каждом shared
хранилище,Это как если бы пуш-пул происходил автоматически среди всех репо shared
.Это не будет верно для clone
, вам придется сначала явно нажать / потянуть.Это очень полезно, но нужно помнить о чем-то в вашем рабочем процессе, потому что может удивить вас при первом использовании, если вы привыкли только к clone
.
Если вы хотите работать в несколькихветви (именованные или безымянные) вашего проекта одновременно, либо clone
или share
будут работать нормально.После того, как вы создали второй репозиторий, вам нужно update
внести его в любой набор изменений, над которым вы хотите начать работать.
Конкретный пример с использованием share
:
hg clone path\to\source\repo working1 # Create local repo working1 cloned from somewhere
cd working1
hg up branchname1
cd ..
hg share working1 working2 # shares the 'store' already used for working1 with working2
cd working2
hg up branchname2 # some other branch or point to start working from
Как только вы зафиксируете что-то в working1
, этот коммит будет виден в истории working2
.Но поскольку они не находятся в одной ветви, это не оказывает реального немедленного влияния на working2
.
working2
сохранит path\to\source\repo
в качестве положения по умолчанию для push / pull, как и working1
.
Моя собственная практика состояла в том, чтобы создавать многочисленные локальные shared
репозитории (быстро, легко, экономит место) и работать в различных отраслях.Часто у меня даже есть несколько из них в одной и той же именованной ветви, но по разным причинам настроены на разные точки истории.Я больше не нахожу особой необходимости на самом деле clone
локально (на том же ПК).
Предостережение - я бы не стал использовать общий доступ через сетевое соединение - как для репо в подключенной сетипривод.Я думаю, что могут возникнуть некоторые проблемы с производительностью или даже надежностью.На самом деле, я бы ни при каких обстоятельствах не работал с сетевым диском с репозиторием Mercurial (если его можно было избежать).Клонировать локально было бы безопаснее.
Во-вторых - Я бы прочитал документы , есть несколько странных сценариев, с которыми вы можете столкнуться;но я думаю, что они, скорее всего, не основаны на моем собственном опыте.
Последнее замечание: хотя share реализована как «расширение» для Mercurial, она фактически была частью его с незапамятных времен.Так что в этом нет ничего нового или экспериментального, не позволяйте сделке «продление» вас оттолкнуть.