我们有几个共享库,它们在父存储库中作为子存储库存在。如果一个人克隆了父 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
每个 subrepo 的 hgrc 看起来像这样:
default = http://ourfogbugz.us.com/..../SharedSub1
很标准的东西。
但!
使用这种设置,同事如何在不使用中央服务器作为中介的情况下从另一个人那里拉取数据?所以同事 A 执行 'hg serve',而 B 执行 'hg pull http://coworkerA.us.com:8000 '......但这会失败,因为 hgsub 文件仍然指向中央服务器,并且因此 B 只会从中央服务器获取更改,而不会从 A 的子存储库中获取任何不存在于中央服务器上的更改。
如果中央服务器关闭或无法访问,这将更加复杂。人们无法直接使用 subrepos 相互拉取!
如何使用 subrepos 拉动同事之间的关系?编辑 hgrc 和 hgsub 文件是不可能的,因为您必须为每个子存储库(我们大约有 20 个)执行此操作,并且为每个同事执行一次!
我还在 Kiln StackExchange 上发布了这个问题,以吸引更广泛的受众: http: //kiln.stackexchange.com/questions/1780/pulling-from-a-co-worker-when-using-subrepositories