Как сделать локальный клон, не вытягивая субрепозы снова? - PullRequest
5 голосов
/ 24 февраля 2012

Я часто работаю с Mercurial, сохраняя локальное хранилище своих восходящих клонов, а затем просто снова локально клонирую для моей реальной рабочей среды:

$ cd /clones
$ hg clone ssh://external-repo.example.com/some/repo/path/foo
$ cd ~/Development
$ hg clone /clones/foo

Это особенно полезно для меня, потому что я часто хочусоздавать новые клоны на самолетах и ​​т. д., где у меня нет доступа в интернет.Однако это не работает, если исходный клон содержит подпункты - наличие файла .hgsubstate означает, что hg всегда будет выходить в Интернет, а не захватывать локальную клонированную ревизию (даже если они ).то же самое ).Есть ли способ заставить локальный клон скопировать файлы, не выходя в интернет?

На этот вопрос есть ответ, который, вероятно, сработает, но кажется очень неудачным для долгосрочного управления.(удалив файл .hgsubstate в клоне в /clones/, а затем сделав из него локальные клоны).

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Вы можете использовать «тривиальный» путь к репозиторию в вашем .hgsub файле, например так:

foo = foo
bar = bar

Это рекомендуемая настройка .Преимущество установки макета состоит в том, что клон имеет такую ​​же структуру , что и хранилище, из которого вы клонируете.Таким образом, вы можете клонировать своих клонов, находясь в самолете.

В качестве альтернативы, вы можете использовать настройку [subpaths] для повторного сопоставления URL-адресов с локальными путями.Это позволяет вам добавить

[subpaths]
http://server/(.*) = /clones/libs/\1

в ваш файл ~/.hgrc, а затем вы увидите, что пути будут преобразованы в /clones/libs при клонировании.

1 голос
/ 24 февраля 2012

Вы можете достичь этого, клонируя вложенные репозитории самостоятельно.Предположим, что у foo есть один подрепэр, называемый bar:

$ cd ~/Development
$ hg clone -U /clones/foo
$ hg clone -U /clones/foo/bar foo/bar
$ hg update -R foo

Обновлению не требуется доступ к Интернету, так как существует субрепозиторий и он содержит необходимые наборы изменений для обновления на ведущем устройстве.

...