Étant donné le cas, j'ai fait deux changements indépendants dans un seul fichier: par exemple. a ajouté une nouvelle méthode et changé une autre méthode.
Je ne veux souvent pas valider les deux changements comme un seul commit, mais comme deux commits indépendants.
Sur un référentiel git, j'utiliserais le mode interactif de git-add (1) pour diviser le morceau en plus petits:
git add --patch
Quelle est la façon la plus simple de faire cela avec Subversion? (Peut-être même en utilisant un plug-in Eclipse)
Mise à jour:
dans The Thing About Git , Ryan l'appelle: "The Tangled Working Copy Problem".
Réponses:
Avec git-svn, vous pouvez créer un référentiel GIT local du référentiel SVN distant, travailler avec lui en utilisant l'ensemble de fonctionnalités GIT complet (y compris les validations partielles), puis tout renvoyer vers le référentiel SVN.
git-svn (1)
la source
Tortoise SVN 1.8 prend désormais en charge cela avec sa fonction "Restaurer après validation". Cela vous permet d'apporter des modifications à un fichier, toutes les modifications étant annulées après la validation
Selon la documentation:
la source
J'ai fait cela en utilisant TortoiseSVN .
L'utilitaire de fusion intégré vous permet d'afficher une différence entre la version du référentiel et votre copie de travail.
Utilisez la fonction de création de sauvegarde de l'utilitaire diff
Vous devriez maintenant avoir toutes vos modifications validées, en utilisant deux validations distinctes.
la source
Essayez d'utiliser
svn diff > out.patch
puis copiez leout.patch
fichier dansout.patch.add
etout.patch.modify
Ce n'est que lorsque vous avez un fichier de correctif fonctionnel que vous rétablissez le fichier d'origine en utilisant
svn revert out.c
.Modifiez les fichiers de correctifs à la main afin qu'ils ne contiennent que les morceaux à ajouter ou à modifier. Appliquez-les au fichier d'origine à l'aide de la
patch
commande, testez si l'ajout a fonctionné, puissvn commit
l'ajout.Laver le rinçage répéter pour le
out.patch.modify
patch.Si les modifications sont séparées dans le fichier comme votre question initiale l'a indiqué - ajout d'une nouvelle méthode, modification d'une méthode existante - cela fonctionnera
C'est une solution très fastidieuse - même si je ne suis pas convaincu que vous devriez avoir une raison de séparer vos commits.
Vous pourriez également avoir extrait plusieurs copies de travail de la même source pour appliquer votre travail à:
Assurez-vous
svn up
et testez pour vous assurer que tout va bien.la source
Ceci est possible en utilisant TortoiseSvn (Windows) depuis la v1.8.
Sous Linux, je voudrais essayer http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php . Je n'ai pas essayé moi-même, cependant.
la source
J'avais l'habitude de faire ceci:
Il s'agit d'une approche simpliste qui suppose qu'un ensemble de modifications est raisonnablement facile à annuler. Pour des situations plus complexes, j'abandonnerais et je commettrais les deux changements sans m'en soucier.
Maintenant que j'utilise git, c'est quelque chose que j'espère que je n'aurai plus jamais à refaire!
la source
J'utilise soit un repo darcs local, soit je fusionne les modifications progressivement. Avec la fusion (opendiff ouvre FileMerge, un programme de fusion fourni avec Xcode; remplacez-le par votre outil de fusion préféré):
fusionner les modifications associées, enregistrer la fusion, quitter le programme de fusion
si plus d'un morceau non lié dans le fichier, rincez et répétez (mais pourquoi attendriez-vous si longtemps avant de vous engager?!)
De plus, si vous connaissez git, vous pouvez utiliser git-svn pour maintenir un dépôt git local et synchroniser vos commits sur un serveur maître svn; fonctionne très bien dans mon expérience limitée.
la source
Essayez VisualSVN pour Visual Studio . La dernière version 6.1 introduit la fonction QuickCommit. Vous pouvez valider partiellement les modifications sélectionnées dans un fichier à l'aide des nouvelles commandes de menu contextuel Valider ce bloc et Valider la sélection dans l'éditeur Visual Studio.
la source
C'est un peu plus risqué que la suggestion complète de Spike mais peut être plus facile à faire. Assurez-vous également de l'essayer sur autre chose en premier, car certains éditeurs refuseront d'enregistrer un fichier qui a changé à moins que vous ne rechargiez ce fichier (perdant toutes vos modifications)
la source
Je pense qu'une option plus simple que de générer des fichiers de différence, de revenir en arrière, etc. serait d'avoir deux copies du référentiel extraites et d'utiliser un outil de comparaison visuel comme DeltaWalker pour copier les morceaux de l'un à l'autre.
La première copie serait celle sur laquelle vous travaillez réellement, et la seconde serait juste à cette fin. Une fois que vous avez apporté une tonne de modifications à la première, vous pouvez copier une section dans la seconde, la valider, copier une autre section, la valider, etc.
la source
svn diff
.svn revert
.patch
outil, soit par édition manuelle, ou autre.diff
ensuite pour comparer votre copie de travail avec votre sauvegarde pour vous assurer que vous avez correctement appliqué les parties du patch.la source