Как правильно использовать расширение hg share? - PullRequest
0 голосов
/ 30 января 2019

Скажем, я клонировал репозиторий в каталог ~ / trunk и хочу поделиться веткой с именем my-new-branch в каталог ~ / my-new-branch.Как бы я это сделал с расширением hg share?

Вот что я делаю:

cd ~

hg share транк my-new-branch

Но потом, когда я перехожу нановый каталог мне нужно в hg до ветки?

Запутался.

1 Ответ

0 голосов
/ 30 января 2019

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, она фактически была частью его с незапамятных времен.Так что в этом нет ничего нового или экспериментального, не позволяйте сделке «продление» вас оттолкнуть.

...