37 votes

Puis-je commettre uniquement des parties de mon code en utilisant SVN ou Mercurial?

Je utiliser Tortoise SVN usuallly, mais j'ai été à la recherche dans Mercurial puisque c'est un système de contrôle de version distribué.

Ce que je recherche, dans les deux systèmes, est un outil qui permettez-moi de n'en choisir que des parties d'un fichier et de les valider. Si je veux le faire maintenant, j'ai copier sur un temp version du fichier et de ne garder que les changements que je veux engager dans la version actuelle, puis copiez le temp version à la version actuelle de nouveau après avoir commis. C'est juste chiant et le programme doit être capable de faire cela pour moi.

J'ai entendu Git prend en charge ce, s'il vous plaît laissez-moi savoir si cela est correct.

40voto

Nicholas Riley Points 26161

Mercurial pouvez faire cela avec l' enregistrement de l'extension.

Un message vous invite pour chaque fichier et chaque diff hunk. 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 reste des diff sera laissé derrière:

% 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

Alternativement, vous pouvez trouver plus facile à utiliser MQ (Mercurial Files d'attente) pour séparer l'individu de changements dans votre référentiel des correctifs. Il y a un MQ variante de l'enregistrement (qrecord), trop.

Mise à jour: essayez Également le crecord extension, qui fournit une interface curses pour hunk/sélection de la ligne.

crecord screenshot

12voto

Pat Notz Points 46841

Oui, git vous permet de faire cela. L' git add commande a un -p (ou --patch) option qui vous permet de revoir vos modifications morceau par morceau, sélectionnez à l'étape (vous pouvez aussi affiner les mecs ou modifier les patchs en place). Vous pouvez également utiliser le mode interactif de git-ajouter (git add -i) et d'utiliser le "p" de l'option.

Voici un screencast sur l'ajout interactif qui illustre également le timbre caractéristique de l' git add.

8voto

Hauge Points 1257

Jetez un œil à TortoiseHG, qui effectuera la sélection des morceaux et vous permettra de valider différents changements dans un fichier en fonction de différents commits.

Cela 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.org/

5voto

Ted Naleid Points 13349

J'ai posé une question similaire, juste un peu tout à l'heure, et la réponse de l'utilisation de la hgshelve plugin est exactement ce que je cherchais.

Avant de faire un commit, vous pouvez mettre les changements à partir de différents fichiers (ou les beaux mecs de changements dans un fichier) sur le "plateau", puis valider ce que vous voulez. Ensuite, vous pouvez unshelve les changements que vous n'avez pas commis et continuer à travailler.

J'ai été en utilisant ces derniers jours, et l'aime beaucoup. Très facile à visualiser et à utiliser.

0voto

craigb Points 10622

Je recommanderais de ne pas travailler comme cela.

Si vous avez à des ensembles de modifications, définissez Un qui est prêt à l'enregistrement et de la série B qui n'est pas encore prêt, comment pouvez-vous être sûr que la seule vérification de définir Un ne cassera pas votre build/tests? Vous risquez de manquer quelques lignes, oubliez les lignes dans un fichier différent, ou de ne pas réaliser une dépendance que l'Un a sur B casser la compilation pour les autres.

Votre engage doit être discret atomique changements qui ne se cassent pas le construire pour vous ou d'autres personnes sur votre équipe. Si vous êtes partiellement commettre un fichier que vous êtes en augmentant considérablement les chances de vous briser le construire pour les autres, sans savoir à ce sujet jusqu'à ce que vous avez quelques malheureux collègue frapper à votre porte.

La grande question est, pourquoi vous sentez-vous le besoin de travailler de cette façon?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X