Validations partielle avec Subversion

voix
88

Étant donné le cas j'ai fait deux changements indépendants dans un fichier: par exemple. a ajouté une nouvelle méthode et a changé une autre méthode.

Souvent , je ne veux pas engager les changements comme un commettras, mais comme deux commits indépendants.

Sur un dépôt git j'utiliser le mode interactif de -git add (1) pour diviser le gros morceau en plus petits:

 git add --patch

Quelle est la meilleure façon de le faire avec Subversion? (Peut-être même à l'aide d'un plug-in Eclipse)

Mise à jour:
Dans la chose Git , Ryan appelle: « la copie de travail Tangled problème. »

Créé 16/09/2008 à 20:07
source utilisateur
Dans d'autres langues...                            


11 réponses

voix
53

Tortoisesvn 1.8 prend désormais en charge ce avec sa fonction « Restore commit après ». Cela vous permet d'effectuer des modifications dans un fichier, avec toutes les modifications être réduits à néant après la validation

Par la documentation:

Pour engager uniquement les parties du dossier qui se rapportent à une question spécifique:

  1. dans la boîte de dialogue de, faites un clic droit sur le fichier, choisissez « restore livraison après »
  2. modifier le fichier par exemple TortoiseMerge: annuler les modifications que vous ne voulez pas engager encore
  3. enregistrer le fichier
  4. valider le fichier
Créé 09/07/2013 à 02:27
source utilisateur

voix
40

Je l' ai fait en utilisant TortoiseSVN .

La construction utilitaire de fusion permet d'afficher une diff entre la version du référentiel et votre copie de travail.

Utilisez la création de sauvegarde en fonction de l'utilitaire diff

  1. Allez à engager votre dossier comme si vous alliez commettre toutes vos modifications.
  2. Dans la fenêtre, double cliquez sur le fichier engager à afficher une comparaison.
  3. Dans les paramètres diff, cliquez sur l'option de fichier d' origine sauvegarde .
  4. Cliquez-droit sur les modifications que vous ne voulez pas, et utiliser select Utiliser un autre bloc de texte .
  5. Enregistrez le diff exactement une fois . La sauvegarde sera écrasée à chaque fois que vous enregistrez. C'est la raison pour laquelle vous souhaitez enregistrer une fois.
  6. Valider le changement.
  7. Écraser l'original avec le fichier .bak créé (qui aura tous vos changements d'origine).
  8. Engagez votre fichier.

Vous devriez maintenant avoir tous vos changements commis, en utilisant deux séparés commits.

Créé 16/09/2008 à 20:16
source utilisateur

voix
29

Avec git-svn vous pouvez faire un dépôt GIT local du dépôt SVN à distance, le travail avec l'aide de l'ensemble complet de fonctionnalités de GIT (y compris commits partiel), puis poussez dans le dépôt SVN.

git-svn (1)

Créé 16/09/2008 à 20:37
source utilisateur

voix
24

Essayez d' utiliser svn diff > out.patchpuis copiez le out.patchfichier out.patch.addetout.patch.modify

Seulement lorsque vous avez un fichier correctif de travail rétablir le fichier d' origine à l' aide svn revert out.c.

Modifier les fichiers de patch à la main afin qu'ils ne contiennent que les gros morceaux pour ajouter ou modifier. Appliquez - les au fichier d' origine en utilisant la patchcommande, test si l'ajout a travaillé, puis svn commitl'addition.

Laver la répétition de rinçage pour le out.patch.modifypatch.

Si les changements sont séparés dans le dossier que votre question initiale a déclaré - a ajouté une nouvelle méthode, a changé une méthode existante - cela fonctionnera

Ceci est une solution très fastidieuse - même si je ne suis pas convaincu que vous devriez avoir aucune raison de séparer vos commits.

Vous pouvez également avoir vérifié plusieurs copies de travail de la même source pour appliquer votre travail contre:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Assurez - vous de svn upet tester pour vous assurer que tout va bien.

Créé 16/09/2008 à 20:21
source utilisateur

voix
9

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

4.4.1. La boîte de dialogue de

Si votre copie de travail est à ce jour et il n'y a pas de conflit, vous êtes prêt à valider vos modifications. Sélectionnez un fichier et / ou les dossiers que vous souhaitez, puis TortoiseSVN → Livrer ....

<Snip>

4.4.3. S'engager uniquement des parties de fichiers

Parfois, vous voulez engager seulement une partie des modifications apportées à un fichier. Une telle situation se produit généralement lorsque vous travaillez sur quelque chose mais un correctif d'urgence doit être commis, et que solution se trouve être dans le même fichier que vous travaillez.

faites un clic droit sur le fichier et utilisez Menu contextuel → après que la restauration de validation. Cela va créer une copie du fichier tel qu'il est. Ensuite, vous pouvez modifier le fichier, par exemple dans TortoiseMerge et annuler toutes les modifications que vous ne voulez pas commettre. Après avoir enregistré ces modifications, vous pouvez valider le fichier.

Après la validation se fait, la copie du fichier est restauré automatiquement, et vous avez le fichier avec toutes vos modifications qui ne sont pas commis de retour.

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

Créé 08/10/2013 à 19:40
source utilisateur

voix
8

Je l'habitude de le faire:

  • Dans mon éditeur (j'utilise vim), modifiez le fichier de sorte que seul l'un des changements apparaissent
  • Enregistrez le fichier (mais ne quittez pas l'éditeur)
  • Engagez le fichier modifié à svn
  • Cliquez sur « annuler » dans l'éditeur suffisamment de fois pour la deuxième série de changements reparaissent
  • Enregistrer à nouveau le fichier
  • Engager la deuxième série de changements.

Ceci est une approche simpliste qui suppose un ensemble de changements est relativement facile à défaire. Pour les situations plus complexes, je renoncerais et engager les changements sans se soucier de lui.

Maintenant que je l'utilise git, c'est quelque chose que j'espère que je n'aurai jamais le faire à nouveau!

Créé 16/09/2008 à 20:13
source utilisateur

voix
5

Je l'utilise soit une darcs locale repo, ou tout simplement fusionner les changements progressivement. Avec la fusion (opendiff ouvre FileMerge, un programme de fusion qui vient avec Xcode, remplacer par votre outil de fusion favori):

cp file file.new
svn revert file
opendiff file.new file -merge file

fusionner les changements liés, enregistrez la fusion, quittez le programme de fusion

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

si plus d'un gros morceau sans rapport dans le fichier, rincer et répéter (mais pourquoi attendre si longtemps avant de s'engager ?!)

En outre, si vous savez git, vous pouvez utiliser git-svn pour maintenir un git local et synchroniser vos commits à un serveur maître svn; fonctionne très bien dans mon expérience limitée.

Créé 16/09/2008 à 20:18
source utilisateur

voix
2
  1. Ouvrez tous les fichiers que vous souhaitez partager dans l'éditeur de choix
  2. L'utilisation d'un ensemble d'outils différents (sur Win, utilisez la suggestion de Spike (l'ancienne version)) Retour à la deuxième série
  3. Commettre
  4. revenir à votre éditeur de choix et enregistrer tous les fichiers

Il est un peu plus risqué que la suggestion complète de Spike, mais peut être plus facile à faire. Assurez-vous également vous essayer sur quelque chose d'autre d'abord comme certains éditeurs refuseront d'enregistrer sur un fichier qui a changé sous le pied à moins que vous rechargerez ce fichier (perdre toutes vos modifications)

Créé 20/01/2009 à 18:45
source utilisateur

voix
1

Essayez VisualSVN pour Visual Studio . La dernière version 6.1 introduit la fonction QuickCommit. Vous pouvez partiellement valider les modifications sélectionnées dans un fichier en utilisant le nouveau Commit ce bloc et Commit Sélection des commandes de menu contextuel dans l'éditeur Visual Studio.

entrez la description d'image ici

Créé 23/03/2018 à 14:49
source utilisateur

voix
0
  1. Copiez tous les fichiers modifiés concernés à des copies de sauvegarde.
  2. Créer un patch de l'état de fonctionnement à l' aide svn diff.
  3. Annuler les fichiers à l' aide svn revert.
  4. Réappliquer les parties du patch que vous souhaitez engager, soit en utilisant l' patchoutil, ou en édition manuelle, ou autre chose.
  5. Exécutez diffensuite pour comparer votre copie de travail avec votre dos pour être sûr que vous avez appliqué le patch-pièces correctement.
  6. Construire et tester.
  7. Commettre.
  8. Copiez vos copies de sauvegarde à votre référentiel check-out.
  9. Répéter à 2. (pas 1.!) Jusqu'à ce que fait.
Créé 13/10/2017 à 14:10
source utilisateur

voix
0

Je pense une option plus facile que de générer des fichiers diff, revenir, etc., serait d'avoir deux copies du dépôt vérifié et utiliser un outil de différenciation visuel comme DeltaWalker copier Hunks d'un à l'autre.

La première copie serait celui que vous travaillez réellement hors de, et le second serait juste à cet effet. Une fois que vous avez fait une tonne de changements à la première, vous pouvez copier une section sur la seconde, le commettre, copier une autre section, commettre, etc.

Créé 12/02/2016 à 19:35
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more