2010-07-29 25 views
1

Nous avons plusieurs bibliothèques partagées qui existent en tant que sous-états dans un référentiel parent. Si une personne clone le repo mère, il ressemble à:Extraction d'un collègue lors de l'utilisation de sous-dépôts

/ParentRepo 
---- .hg 
---- .hgsub 
---- .hgsubstate 
---- SharedSub1 
---- SharedSub2 
---- SharedSub3 
---- SharedSub4 
---- ParentRepo.sln 

.hgsub ressemble à ceci:

SharedSub1 = http://ourfogbugz.us.com/..../SharedSub1 
SharedSub2 = http://ourfogbugz.us.com/..../SharedSub2 
SharedSub3 = http://ourfogbugz.us.com/..../SharedSub3 
SharedSub4 = http://ourfogbugz.us.com/..../SharedSub4 

de hgrc Chaque subrepo ressemble à ceci:

default = http://ourfogbugz.us.com/..../SharedSub1 

assez standard des trucs.

Mais! Comment, à l'aide de cette configuration, un collaborateur tire-t-il d'un autre sans utiliser un serveur central en tant qu'intermédiaire? Donc, le collègue A fait 'hg serve', et B fait 'hg pull http://coworkerA.us.com:8000' ... mais cela échouera, car le fichier hgsub pointe toujours sur le serveur central, et donc B ne recevra que des changements du serveur central et n'obtient aucun changement des sous-états de A qui n'existent pas sur le serveur central.

Ceci est encore plus compliqué si le serveur central est en panne ou inaccessible. Il n'y a aucun moyen pour les gens de se tirer directement les uns des autres en utilisant des sous-déclarations!

Comment se débrouiller entre collègues en utilisant des sous-états? Il est hors de question de modifier les fichiers hgrc et hgsub, car vous devez le faire pour chaque sous-reportage (nous en avons environ 20), et une fois pour chaque collègue!

J'ai également posté cette question sur le Kiln StackExchange de frapper un public plus large: http://kiln.stackexchange.com/questions/1780/pulling-from-a-co-worker-when-using-subrepositories

Répondre

2

Vous pouvez (et général le cas) utiliser des chemins relatifs dans vos entires .hgsub. Si ces lignes sont les suivantes:

SharedSub1 = ../SharedSub1 
SharedSub2 = ../SharedSub2 
SharedSub3 = ../SharedSub3 
SharedSub4 = ../SharedSub4 

alors vous pouvez cloner du centre, d'un ami, ou un clone local sur votre propre.

+0

Le fichier .hgsub, sur le serveur central, aurait donc des chemins relatifs? Lorsque vous clonez cela en local, cela signifie-t-il que vous aurez également besoin de copies séparées de tous les sous-répertoires? – Andrew

+0

Vous auriez besoin d'une copie de chacun, oui, mais plusieurs clones du projet de niveau supérieur pourraient pointer vers le même clone local ../SharedSub1 - leurs répertoires de travail ne sont pas utilisés et la révision d'utilisation est stockée dans le clone local du .hgsubstate du parent repo afin qu'ils ne se heurtent pas les uns les autres. –

+0

Mais vous devrez toujours cloner manuellement tous les SharedSub (s), n'est-ce pas? Certes, il s'agit d'une opération ponctuelle, mais c'est un gros obstacle. Aussi, avez-vous obtenu des sous-rapports relatifs pour fonctionner correctement avec "hg serve"? – Andrew