105 votes

Commits partiels avec Subversion

Étant donné le cas que j'ai fait deux changements indépendants en un fichier : par exemple, ajout d'une nouvelle méthode et modification d'une autre méthode.

Souvent, je ne veux pas valider les deux modifications en tant que un commettre, mais comme deux des engagements indépendants.

Sur un dépôt git, j'utiliserais l'option Mode interactif de git-add(1) pour diviser le gros morceau en plus petits :

 git add --patch

Quel est le moyen le plus simple de faire cela avec Subversion ? (Peut-être même en utilisant un plug-in Eclipse)

Mise à jour :
Sur Le truc à propos de Git C'est ce que dit Ryan : "L'enchevêtrement du problème de l'exemplaire de travail."

0 votes

Cherchiez-vous spécifiquement une solution en ligne de commande ? Beaucoup des réponses ci-dessous mentionnent TortoiseSVN 'restore after commit', qui est une fonctionnalité propre à Tortoise -- donc basée sur l'interface graphique et Windows.

67voto

Casebash Points 22106

Tortoise SVN 1.8 prend désormais en charge avec sa fonction "Restore after commit". Cela vous permet d'apporter des modifications à un fichier, toutes les modifications étant annulées après la validation.

Selon la documentation :

Pour valider uniquement les parties du fichier qui se rapportent à un problème spécifique :

  1. dans la boîte de dialogue de validation, faites un clic droit sur le fichier, choisissez "restaurer après validation".
  2. éditez le fichier dans TortoiseMerge par exemple : annulez les changements que vous ne voulez pas encore valider.
  3. enregistrer le fichier
  4. valider le fichier

0 votes

Je me demande comment cela fonctionne. J'ai vérifié le Notes de publication de SVN 1.8 mais je n'arrive pas à comprendre sur quelle fonctionnalité "Restore after commit" est basée.

3 votes

@DavidS Ce n'est pas une fonctionnalité de SVN. C'est une fonctionnalité de TortoiseSVN.

0 votes

Pour information, le SVN 1.8 sera supprimé à partir d'avril 2018 avec la sortie de la version 1.10.

42voto

Spike Points 366

Je l'ai fait en utilisant TortoiseSVN .

L'utilitaire de fusion intégré vous permet d'afficher une différence entre la version du dépôt et votre copie de travail.

Utilisez le créer une sauvegarde fonction de l'utilité différentielle

  1. Allez commiter votre fichier comme si vous alliez commiter toutes vos modifications.
  2. Dans la fenêtre de livraison, double-cliquez sur le fichier pour afficher une différence.
  3. Dans les paramètres de diff, cliquez sur l'option pour sauvegarde du fichier original .
  4. Cliquez avec le bouton droit de la souris sur les changements que vous ne voulez pas, et utilisez la fonction "select". utiliser un autre bloc de texte .
  5. Sauvegarder le diff exactement une fois . La sauvegarde sera écrasée à chaque fois que vous enregistrez. C'est pourquoi vous ne voulez sauvegarder qu'une seule fois.
  6. Engagez le changement.
  7. Remplacez l'original par le fichier .bak créé (qui contiendra toutes vos modifications originales).
  8. Validez votre fichier.

Vous devriez maintenant avoir toutes vos modifications validées, en utilisant deux validations séparées.

1 votes

Comment avez-vous fait exactement ? Je serais intéressé par l'apprentissage de cette technique.

0 votes

Ce serait tellement bien si cela pouvait automatiquement écraser les fichiers .bak après un commit.

0 votes

Je n'ai pas trouvé l'étape 3 : Option de sauvegarde, en utilisant Tortoise SVN 1.8.1.

35voto

jkramer Points 7271

Avec git-svn, vous pouvez créer un dépôt GIT local à partir du dépôt SVN distant, travailler avec lui en utilisant toutes les fonctionnalités de GIT (y compris les commits partiels), puis repousser le tout vers le dépôt SVN.

git-svn (1)

30 votes

Il y a une ironie particulière dans cette solution.

24voto

Chris Points 191

Essayez d'utiliser svn diff > out.patch puis copier le out.patch pour out.patch.add y out.patch.modify

Seulement quand vous avez un fichier patch fonctionnel rétablir le fichier original en utilisant svn revert out.c .

Modifiez les fichiers de correction à la main de manière à ce qu'ils ne contiennent que les éléments suivants chasseurs à ajouter ou à modifier. Appliquez-les au fichier d'origine à l'aide de la fonction patch pour vérifier si l'ajout a fonctionné, puis svn commit l'ajout.

Laver, rincer, répéter pour le out.patch.modify patch.

Si les modifications sont distinctes dans le fichier, comme l'indique votre question initiale - ajout d'une nouvelle méthode, modification d'une méthode existante - cela fonctionnera.

C'est une solution très fastidieuse - bien que je ne sois pas convaincu que vous ayez une raison de séparer vos commits.

Vous auriez également pu emprunter plusieurs copies de travail de la même source pour y appliquer votre travail :

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Veillez à svn up et tester pour s'assurer que tout va bien.

10voto

parvus Points 1269

Ceci est possible en utilisant TortoiseSvn (Windows) depuis la v1.8.

4.4.1. La boîte de dialogue Commit

Si votre copie de travail est à jour et qu'il n'y a pas de conflits, vous êtes prêt à valider vos modifications. Sélectionnez n'importe quel fichier et/ou dossiers que vous voulez livrer, puis TortoiseSVN → Commit....

<snip>

4.4.3. Livrer seulement des parties de fichiers

Parfois, vous voulez seulement valider une partie des modifications que vous avez apportées à un fichier. Une telle situation se produit généralement situation se produit généralement lorsque vous travaillez sur quelque chose, mais qu'une correction urgente urgente doit être livrée, et que cette correction se trouve dans le même fichier sur lequel vous sur lequel vous travaillez.

cliquez avec le bouton droit de la souris sur le fichier et utilisez le menu contextuel → Restaurer après la validation. Cela créera une copie du fichier tel qu'il est. Ensuite, vous pouvez éditer le fichier, par exemple dans TortoiseMerge et annuler toutes les modifications que vous ne voulez pas commettre. Après avoir enregistré ces changements, vous pouvez livrer le fichier.

Une fois la validation effectuée, la copie du fichier est restaurée automatiquement, et vous avez le fichier avec toutes vos modifications qui qui n'ont pas été validées.

Sous Linux, je donnerais http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php un essai. Je ne l'ai pas essayé moi-même, cependant.

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