Question

J'utilise généralement Tortoise SVN, mais je me suis penché sur Mercurial car il s’agit d’un système de contrôle de révision distribué.

Ce que je recherche, dans les deux systèmes, est un outil qui me permet de ne sélectionner que des parties d’un fichier et de les valider. Si je veux le faire maintenant, je dois copier dans une version temporaire du fichier et ne conserver que les modifications que je souhaite valider dans la version actuelle, puis copier à nouveau la version temporaire dans la version actuelle après l'avoir validée. C'est un tel problème et le programme devrait pouvoir le faire pour moi.

J’ai entendu dire que Git est d’accord avec cela, merci de me faire savoir si c’est correct.

Était-ce utile?

La solution

Mercurial peut le faire avec l'extension record .

Il vous sera demandé pour chaque fichier et chaque morceau diff. Par exemple:

% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]  
@@ -12,7 +12,7 @@
 \setmonofont[Scale=0.88]{Consolas}
 % missing from xunicode.sty
 \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
 \usepackage[pdftex]{graphicx}
 \fi

record this change to 'prelim.tex'? [Ynsfdaq?]  
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?]  n
Waiting for Emacs...

Après la validation, le diff restant sera laissé:

% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file

Sinon, vous trouverez peut-être plus facile d'utiliser MQ (files d'attente Mercurial) pour séparer les modifications individuelles de votre référentiel en correctifs. Il existe également une variante d'enregistrement MQ (qrecord).

Mise à jour : essayez également l'extension crecord . qui fournit une interface curses à la sélection de morceaux / lignes.

capture d'écran de crecord

Autres conseils

Oui, git vous permet de le faire. La commande git add a une option -p (ou - patch ) qui vous permet de réviser vos modifications, morceau par morceau, sélectionnez quelle étape mettre en scène (vous pouvez également affiner les morceaux ou éditer les patchs en place). Vous pouvez également utiliser le mode interactif pour utiliser git-add ( git add -i ) et utiliser l'option "p". option.

Voici un screencast sur l'ajout interactif qui illustre également la fonctionnalité de correctif de git add .

Découvrez TortoiseHG, qui effectuera la sélection des morceaux et vous permettra de valider différentes modifications dans un fichier en fonction de différents commits.

Il vous permettra même de valider toutes les modifications apportées à certains fichiers, ainsi que des modifications partielles apportées à d'autres fichiers en une seule validation.

http://tortoisehg.bitbucket.io/

J'ai demandé à un question similaire il y a quelques instants, et la réponse résultante de l'utilisation de hgshelve extension était exactement ce que je cherchais.

Avant de procéder à une validation, vous pouvez placer les modifications provenant de différents fichiers (ou de toutes les modifications contenues dans un fichier) sur le champ "Stockage". et commettez ensuite les choses que vous voulez. Ensuite, vous pouvez annuler les modifications que vous n'avez pas commises et continuer à travailler.

Je l'utilise depuis quelques jours et je l'aime beaucoup. Très facile à visualiser et à utiliser.

Mercurial fournit maintenant une option - interactive (ou -i ) à la commande commit , qui active cette fonctionnalité dès la sortie du boîte.

Cela fonctionne directement à partir de la ligne de commande, il est donc parfait si vous êtes un passionné de ligne de commande!

En cours d'exécution

> hg commit -i

commence une session interactive qui permet d'examiner, de modifier et d'enregistrer des modifications individuelles pour créer un commit.

Cela se comporte de manière très similaire aux options - patch et - interactive pour git add et git commit commandes.

Je recommanderais de ne pas travailler comme ça.

Si vous devez modifier des ensembles, définissez A qui est prêt à archiver et B, qui n’est pas encore prêt, comment pouvez-vous être sûr que seul l’enregistrement de l’ensemble A ne rompra pas votre construction / vos tests? Il se peut que vous manquiez des lignes, que vous oubliez des lignes dans un fichier différent ou que vous ne réalisiez pas la dépendance de A par B, qui coudrait la construction des autres.

Vos commits doivent être des modifications atomiques discrètes qui ne cassent pas la construction pour vous ou pour les autres de votre équipe. Si vous validez partiellement un fichier, vous augmentez considérablement les chances que les autres le sachent sans le savoir jusqu'à ce qu'un malheureux collègue frappe à votre porte.

La grande question est la suivante: pourquoi ressentez-vous le besoin de travailler de cette façon?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top