2010-10-16 9 views
4

Mercurial a une commandeQu'est-ce qu'un exemple d'utilisation pratique de "hg copy file file2" utilisant Mercurial?

hg copy file file2 

et le changement peut se propager le changement lors de la première fusion. Le livre d'O'Reilly Mercurial dit que Mercurial est le seul système de contrôle à la source qui fait cela.

Qu'est-ce qu'une utilisation pratique? Le livre mentionne faire une copie du fichier et corrige les bogues, donc le correctif peut se propager dans le fichier d'origine, mais avec le contrôle de version, n'éditions-nous pas le fichier directement, et si le correctif fonctionne, alors directement commettre ce fichier? Ou même si pour une raison quelconque nous devons faire une copie, nous pouvons cp file file2, tester le correctif, et mv file2 file pour replacer ce fichier dans le fichier original, et valider le fichier. Quel est un bon exemple d'utilisation de la fonctionnalité hg copy?

+0

Je me demandais la même chose. Ensuite, j'ai vu quelqu'un l'utiliser pour diviser les gros fichiers en plus petit: http: // stackoverflow.com/a/1613196 –

Répondre

0

Disons que vous avez une classe de base dans un fichier. Vous souhaitez créer une classe dérivée afin de créer un hg copy et personnaliser la classe dérivée en supprimant certaines méthodes et en apportant des modifications aux autres. Maintenant, votre collègue dans une autre branche a corrigé un bug dans la classe de base. Lorsque vous effectuez une fusion, cette correction de bogue sera fusionnée dans votre classe dérivée ainsi que dans votre classe de base.

+0

est-il vrai que le timing doit être bon? Si je crée la classe dérivée et que je vérifie le code, et qu'il corrige le bogue, tirez, fusionnez et validez, alors le correctif ne sera pas là? Il peut aussi casser la classe dérivée d'ailleurs? Maintenant, si c'est un fichier de configuration que nous copions, alors nous ne voulons probablement pas utiliser 'hg copy' car nous ne voulons pas qu'un changement se propage à l'autre. –

+0

Je suis à peu près sûr que cela fonctionnera pour quiconque fusionnera. Oui, il pourrait casser la classe dérivée ou avoir un autre effet secondaire indésirable. C'est pourquoi vous pouvez désactiver la propagation si vous préférez. –

2

Voici un exemple que j'ai personnellement utilisé. Le progiciel avec des fichiers de configuration complexes fournit parfois des exemples avec des noms comme universe-wsgi.ini.sample (hi, galaxy), et dans le cadre de l'installation, vous êtes censé copier le fichier .ini.sample sur un fichier .ini. Si vous le faites en utilisant:

hg copy universe-wsgi.ini.sample universe-wsgi.ini 

alors chaque fois que vous mettez à jour le logiciel avec hg pull ; hg update les nouveaux paramètres disponibles dans l'échantillon seront ajoutés à leurs valeurs par défaut à votre version personnalisée.

+0

Nos makefiles font cela maintenant pour certains de nos propres fichiers, c'est super de savoir que hg peut le gérer si bien. –

+0

Il est logique que cela se produise, mais je trouve encore vraiment cool :) – shambulator

+0

Hmm, êtes-vous sûr que c'est le cas? D'après ce que je lisais, le cp hg ne fait que propager les changements jusqu'à la première fusion qui n'a pas vu le fichier copié. (http://hgbook.red-bean.com/read/mercurial-in-daily-use.html). Cela étant dit, il semble seulement gérer le cas où les changements ont été faits simultanément mais pas une mise à jour continue comme un sample.ini comme vous le décrivez. Ainsi, par exemple, si je comprends bien, si vous copiez le fichier, vous validez la modification puis modifiez l'original, la copie ne sera pas touchée. – Gary

0

J'ai vu beaucoup de confusion sur ce sujet, et j'avoue que j'étais trop au début. D'après ce que je comprends, le cas d'utilisation est le suivant.

Si vous faites une copie d'un fichier et que quelqu'un d'autre travaille sur le même fichier en même temps ou diverge/branche dans une branche légère ou réelle à partir d'un moment qui chevauche les changesets ce fichier est copié et éventuellement modifié, c'est un candidat pour la copie hg.

Il résout le problème d'avoir une régression dans ce fichier de changements futurs jusqu'à ce qu'il soit connu pour exister par les autres "têtes" de la branche.

Ce qu'il ne semble pas utilisé pour est:

  • Garder les fichiers régulièrement synchronisés et à jour qui ont été copiées de l'original

Le problème se complique surtout une fois que vous obtenez en re -factoring. Cela ne serait pas souhaitable d'appliquer des modifications à un fichier qui a été copié il y a longtemps. Il semble que cela ne fonctionnerait que si vous conserviez votre développement du fichier copié dans une branche complètement séparée, mais une fois que les deux branches sont à nouveau fusionnées, la copie hg ne fera plus ce que vous attendez.

Ma référence: http://hgbook.red-bean.com/read/mercurial-in-daily-use.html