⇤ ← Revision 1 as of 2009-09-07 12:11:49
Size: 6083
Comment: Translation
|
Size: 6116
Comment: Some typo and style fixes
|
Deletions are marked like this. | Additions are marked like this. |
Line 10: | Line 10: |
Les sous-dépôts sont uen fonctionnalité qui vous permet de traiter avec une | Les sous-dépôts sont une fonctionnalité qui vous permet de traiter avec une |
Line 31: | Line 31: |
Maintenant, nous allons marquer "nested" comme étant un sous dépôt en créant | Maintenant, nous allons marquer "nested" comme étant un sous-dépôt en créant |
Line 47: | Line 47: |
les sous dépôts préalablement définis et ensuite, enregistrer leur états résultants dans un fichier spécial {{{.hgsubstate}}} : |
les sous dépôts-préalablement définis, puis d'enregistrer leur état résultant dans un fichier spécial {{{.hgsubstate}}} : |
Line 86: | Line 86: |
de faire un pull aux sous dépôts spécifiés et les mettre à jour à l'état | de faire un pull des sous-dépôts spécifiés et les mettre à jour à l'état |
Line 104: | Line 104: |
Les sous dépôts peuvent aussi contenir leurs propres sous dépôts et Mercurial va recommencer autant que nécessaire. |
Les sous-dépôts peuvent aussi contenir leurs propres sous-dépôts et Mercurial opérera de façon récursive autant que nécessaire. |
Line 114: | Line 113: |
complètement ignorantes des sous dépôts. Pour le moment, seulement {{{update}}}, {{{commit}}} et {{{push}}} supportent les sous dépôts. |
complètement ignorantes des sous-dépôts. Pour le moment, seulement {{{update}}}, {{{commit}}} et {{{push}}} supportent les sous-dépôts. |
Line 117: | Line 116: |
De plus, il y a plusieurs comportement qui sont pour le moment très mal définis | De plus, il y a plusieurs comportements qui sont pour le moment très mal définis |
Line 135: | Line 134: |
{{{<revision><espace><chemin>}}}. Ce fichier n'est pas supposé être édité à la main mais accepte tout format d'identifiant que hg accepte. Il est aussi |
{{{<révision><espace><chemin>}}}. Ce fichier n'est pas supposé être édité à la main mais accepte tout format d'identifiant que Mercurial accepte. Il est aussi |
Line 138: | Line 137: |
prévenir que les mises à jour automatiques d'embrouiller ce fichier et garder {{{l'historique de .hgsub ordonné}}}. L'état combiné peut être visualisé avec |
éviter que les mises à jour automatiques n'embrouillent ce fichier et pour garder l'historique de {{{.hgsub}}} lisible. L'état combiné peut être visualisé avec |
Line 145: | Line 144: |
ensemble limité d'opérations sur un sous dépôt. Les sous dépôts peuvent être | ensemble limité d'opérations sur un sous-dépôt. Les sous-dépôts peuvent être |
Line 149: | Line 148: |
# vérifie si les sous dépôts sont souillés | # vérifie si les sous-dépôts sont souillés |
Line 159: | Line 158: |
* Réduire les faux messages de sorties tels que 'nothing changed' * Ceci pourrait être assez facile d'étendre cette fonctionnalité pour supporter les sous dépôrs non natifs, depuis d'autres systèmes tels que git ou SVN. |
* Réduire les faux messages de sorties tels que « nothing changed » * Ceci pourrait être assez facile d'étendre cette fonctionnalité pour supporter les sous dépôts non natifs, depuis d'autres systèmes tels que Git ou Subversion. |
Sous-dépôts
(Cette page est une traduction de l'original en anglais : subrepos)
Cette fonctionnalité est considérée comme expérimentale pour Mercurial 1.3 est est sujette à subir des changements
Les sous-dépôts sont une fonctionnalité qui vous permet de traiter avec une collection de dépôts comme un groupe. Ceci vous permettra de cloner, committer, faire des push ou des pull sur des projets et leurs librairies associées comme un groupe.
Contents
Usage basique
Commencement
Pour débuter avec l'utilisation des sous-dépôts, vous avez besoin de deux dépôts, un dépôt principal (main) et un dépôt imbriqué (nested) :
$ hg init main $ cd main $ hg init nested $ echo test > nested/foo $ hg -R nested add nested/foo
Maintenant, nous allons marquer "nested" comme étant un sous-dépôt en créant une entrée pour lui dans le fichier spécial .hgsub. Le premier 'nested' est le chemin d'accès dans notre répertoire de travail, et le second est une URL ou un chemin d'où faire les pull. Ici, nous allons simplement faire des pull depuis 'nested' en utilisant un chemin relatif à notre répertoire main. Ceci signifie que 'n'importe qui pouvant accéder à notre dépôt main peut accéder à notre dépôt nested en suivant nested sur ce chemin'.
$ echo nested = nested > .hgsub $ hg add .hgsub
Committer
Lorsque nous commitons, Mercurial va tenter de commiter récursivement dans tous les sous dépôts-préalablement définis, puis d'enregistrer leur état résultant dans un fichier spécial .hgsubstate :
$ hg ci -mtest committing subrepository nested $ cat .hgsubstate 3f68b2f93426b6966b604536037b5d325ba00741 nested
Structure du répertoire
A ce point de notre exemple, nous avons la structure de répertoires suivante :
main/ .hg/ .hgsub .hgsubstate nested/ .hg/ foo
Avec .hgsub contenant
nested = nested
et .hgsubstate contenant
3f68b2f93426b6966b604536037b5d325ba00741 nested
Mise à jour
Chaque fois qu'une nouvelle version de Mercurial rencontre ce fichier .hgsubstate en mettant à jour votre répertoire de travail, il va tenter de faire un pull des sous-dépôts spécifiés et les mettre à jour à l'état approprié :
$ cd .. $ hg clone main main2 updating working directory pulling subrepo nested requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat main2/nested/foo test
Les sous-dépôts peuvent aussi contenir leurs propres sous-dépôts et Mercurial opérera de façon récursive autant que nécessaire.
Mise en garde
Comme il s'agit d'une nouvelle fonctionnalité complexe, il y a plusieurs points épineux. Considérez ce code comme expérimental et attendez vous à ce que certains comportements changent.
La plupart des commandes comme diff et status sont pour le moment complètement ignorantes des sous-dépôts. Pour le moment, seulement update, commit et push supportent les sous-dépôts.
De plus, il y a plusieurs comportements qui sont pour le moment très mal définis ou implémentés :
- Update/merge ne peuvent pas pour le moment supprimer totalement les sous dépôts du fait que cela perdrait les changements locaux
- Il n'y a pas de support pour merger à travers des sous dépôts mouvants (renommés/déplacés)
- Les collisions entre fichiers normaux et sous dépôts ne sont pas traités
- Les pulls sur les sous-dépôts sont toujours fait après un délais requis par un update
Faire un update utilise toujours l'URL de .hgsub (ou toute URL par défaut que vous auriez spécifiée dans le .hgrc du sous dépôt), plutôt que le dernier que vous auriez spécifié dans votre dernier pull. Pull -r ne filtrera pas les révisions qui auraient subies un pull dans les sous-dépôts.
- push ignore de même les filtres sur les URL et révisions
- commit ne propage pas certains flags comme -A aux sous dépôts
En interne
Le format de .hgsub utilise le modèle de configuration de hgrc. Ceci réserve un préfixe source de [ pour d'autres extensions (cf. plus bas). De futures extensions devraient aussi utiliser des sections nommées dans ce fichier.
Le format de .hgsubstate est similaire au format des tags, dans la forme <révision><espace><chemin>. Ce fichier n'est pas supposé être édité à la main mais accepte tout format d'identifiant que Mercurial accepte. Il est aussi automatiquement fusionné lorsque nécessaire. Il est séparé de .hgsub pour éviter que les mises à jour automatiques n'embrouillent ce fichier et pour garder l'historique de .hgsub lisible. L'état combiné peut être visualisé avec hg debugsub.
En interne, l'état des sous dépôts est représenté comme un hash du chemin vers la paire (source,révision) qui combine les éléments des deux fichiers ci-dessus. Il existe aussi un nouveau type d'objet subrepo qui expose un ensemble limité d'opérations sur un sous-dépôt. Les sous-dépôts peuvent être traversés ainsi :
# vérifie si les sous-dépôts sont souillés c = repo['tip'] for s in c.substate: subrepo = c.sub[s] print s, subrepo.dirty()
TODO
- Ajouter un support en ligne de commande
- Traiter complètement la suppression de sous dépôts
- Réduire les faux messages de sorties tels que « nothing changed »
- Ceci pourrait être assez facile d'étendre cette fonctionnalité pour supporter les sous dépôts non natifs, depuis d'autres systèmes tels que Git ou Subversion.