У нас есть несколько общих библиотек, которые существуют как subrepos в родителе repo. Если человек клонирует родителя repo, это смотрит что-то как:
/ParentRepo
---- .hg
---- .hgsub
---- .hgsubstate
---- SharedSub1
---- SharedSub2
---- SharedSub3
---- SharedSub4
---- ParentRepo.sln
.hgsub похож на это:
SharedSub1 = http://ourfogbugz.us.com/..../SharedSub1
SharedSub2 = http://ourfogbugz.us.com/..../SharedSub2
SharedSub3 = http://ourfogbugz.us.com/..../SharedSub3
SharedSub4 = http://ourfogbugz.us.com/..../SharedSub4
hgrc каждого subrepo выглядит примерно так:
default = http://ourfogbugz.us.com/..../SharedSub1
Довольно стандартный материал.
Но!
Как с помощью этой установки коллега вытягивает от другого, не используя центральный сервер в качестве посредника? Таким образом, коллега A делает 'hg, служат', и B делает 'hg, вытягивают http://coworkerA.us.com:8000'..., но это перестанет работать, поскольку hgsub файл все еще указывает на центральный сервер, и таким образом B только получит изменения от центрального сервера и не получит любые изменения от A subrepos, которые не существуют на центральном сервере.
Это далее сложно, если центральный сервер снижается или недостижим. Нет никакого способа для людей вытянуть друг от друга непосредственно использующего subrepos!
Как вытягивает между коллегами, сделанными с помощью subrepos? Редактирование hgrc и hgsub файлов вне рассмотрения, потому что необходимо было бы сделать это для каждого subrepo (у нас есть приблизительно 20), и однажды для каждого коллеги!
Я также отправил этот вопрос на Печи для обжига StackExchange для удара более широкой аудитории: http://kiln.stackexchange.com/questions/1780/pulling-from-a-co-worker-when-using-subrepositories
Вы можете (и обычно должны) использовать относительные пути в ваших входах .hgsub. Если бы эти строки были:
SharedSub1 = ../SharedSub1
SharedSub2 = ../SharedSub2
SharedSub3 = ../SharedSub3
SharedSub4 = ../SharedSub4
, то вы могли бы клонировать из центра, от друга или из локального клона самостоятельно.