Situation
J'en ai deux .NET solutions (Foo
et Bar
) et d'une bibliothèque commune qui contient ProjectA, Projetb, et ProjectC. Foo
et Bar
référence à une ou plusieurs projets de la bibliothèque, mais les projets de la bibliothèque ne sont pas situés dans l' Foo
et Bar
Solution de dossiers.
Structure de répertoire:
-- My Documents*
-- Development
-- Libraries
-- ProjectA
-- ProjectB
-- ProjectC
-- Projects
-- Foo
-- Solution
-- .hg
-- .hgignore
-- Foo { Project Folder }
-- FooTests { Project Folder }
-- Foo.sln { References ProjectA }
-- Foo.suo
-- Bar
-- Solution
-- .hg
-- .hgignore
-- Bar { Project Folder }
-- BarTests { Project Folder }
-- Bar.sln { References ProjectA and ProjectB }
-- Bar.suo
*hélas, je suis encore sous Windows XP...
Mercurial Subrepositories
Objectif - je veux mettre en place subrepos de sorte que je peux stocker le code source de tous référencés de la bibliothèque de projets dans ma Foo
et Bar
des dépôts.
Selon cette page (qui est littéralement la seule documentation que je peux trouver sur subrepos), la création d'un subrepo nécessite l'exécution des commandes suivantes à partir d'une fenêtre de la console DOS:
1| $ hg init main
2| $ cd main
3| $ hg init nested
4| $ echo test > nested/foo
5| $ hg -R nested add nested/foo
6| $ echo nested = nested > .hgsub
7| $ hg add .hgsub
8| $ ci -m "initial commit"
Questions
- Pouvez tout ou partie de ces mesures soient exécutées avec TortoiseHG, à partir de la version 0.9.2? Si oui, comment? Je suis sûr que les lignes 1 à 3, mais je ne sais pas sur les lignes 4-7. Rien de tout cela semble être documenté dans TortoiseHG.
- Que fait le code ci-dessus n' (ligne par ligne explication serait très apprécié). Voici quelques questions me sont venues à l'esprit pendant que j'essayais de déchiffrer:
- Qu'est -
>
faire? J'ai essayé de chercher par le biais de l'Mercurial docs pour>
, mais ne trouve rien. - Dans la ligne 5, je ne comprends pas ce qu'
nested/foo
est. Où avez -foo
proviennent de? Qu'est -foo
? Un référentiel? Un dossier? - Ligne 6 - celui-ci me déroute complètement.
- À la ligne 7, je suppose
.hgsub
est ajouté à de lamain
? Ou est-il ajouté à de lanested
?
- Qu'est -
- Disons que je reçois mon subrepos mis en place, et mon
Bar
référentiel est maintenant à la révision 10. Si je tente de mettre à jour mon répertoire de travail pour la révision 7, est-ce la cause de mon dossiers de la bibliothèque (My Documents/Development/Libraries/ProjectA
et.../Libraries/ProjectB
) de mettre à jour à tout ce qui est stocké dans la révision 7 ainsi?
Mise à jour
J'ai ajouté un 8 ligne de code: ci -m "initial commit"
. Cela ne signifie deux choses: (1) ajoute une .hgsubstate fichier à la principale repo et (2) valide toutes les modifications, y compris les nouvelles subrepo dans le dépôt principal (avec le message "initial s'engager"). Le but de l' .hgsubstate fichier est de garder une trace de l'état de tous les subrepos, donc si vous revenez à une version antérieure, il va saisir la révision correcte de tous les subrepos ainsi.
Mise à jour 2 - quelques instructions
Après d'autres expériences, je pense que je peux maintenant donner les étapes à suivre pour résoudre mon problème d'origine (en utilisant principalement l'Explorateur Windows et TortoiseHG):
La création d'un subrepo
-
Libraries/ProjectA
,Libraries/ProjectB
, et les principaux référentiels (Projects/Foo/Solution
etProjects/Bar/Solution
) doit être séparé des dépôts. - Ouvrez
Projects/Foo/Solution
. - Clone
Libraries/ProjectA
deProjects/Foo/Solution
. - Ajouter
ProjectA
de laFoo
référentiel. -
Utilisez un éditeur de texte pour créer un fichier appelé
.hgsub
, contenant les éléments suivants:ProjectA = ProjectA
-
Ouvrez une fenêtre de la console DOS et entrez les commandes suivantes (voir la note ci-dessous):
cd c:\...\Projects\Foo\Solution hg ci -m "Committing subrepo "ProjectA"
-
Pour
Bar
, les étapes sont fondamentalement les mêmes, à l'exception de l' .hgsub fichier doit contenir des entrées pour les deux projets, comme ceci:ProjectA = ProjectA ProjectB = ProjectB
Remarque: en commençant par TortoiseHG 0.10 (qui est prévue pour le mois de Mars), vous serez en mesure d'utiliser l' HG Commit
commande shell pour ce faire, mais pour l'instant, vous devez utiliser la ligne de commande.
Une fois que c'est tous ensemble, ça devient un peu plus facile.
Livrer des changements - de valider les modifications apportées à l' Foo
ou Bar
, vous faites un Synchronize/Pull
opération pour chaque subrepo pour obtenir le subrepos en phase avec les dernières révisions du projet de bibliothèque de référentiels. Ensuite, vous utilisez la ligne de commande pour valider les modifications (jusqu'à la version 0.10, quand vous pouvez simplement utiliser TortoiseHG à valider).
La mise à jour de répertoire de travail à une révision antérieure - Ce qui semble fonctionner assez normalement avec TortoiseHG et ne semble pas nécessiter l'utilisation de toutes les commandes DOS. Travailler avec la version antérieure de Visual Studio, vous aurez besoin de faire un Synchronize/Push
opération pour mettre l'ancienne version de la bibliothèque de projets de retour dans l' Libraries/ProjectX
le dossier.
Autant que j'aime TortoiseHG pour les tâches simples, il est probablement mieux d'écrire des fichiers batch sont le plus fréquemment utilisé subrepo opérations (en particulier de la mise à jour).
Espérons que cela aide quelqu'un dans l'avenir. Si vous voyez des erreurs, s'il vous plaît laissez-moi savoir (ou se sentir libre de modifier vous-même si vous en êtes capable).