Question

Dans ce cas, deux modifications indépendantes ont été apportées au fichier un : par exemple. a ajouté une nouvelle méthode et a changé une autre méthode.

Souvent, je ne souhaite pas valider les deux modifications comme un , 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

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

Mise à jour:
Dans The Thing About Git , Ryan l'appelle: & # 8220; Le problème embrouillé de la copie de travail. & # 8221;

Était-ce utile?

La solution

Avec git-svn, vous pouvez créer un référentiel GIT local du référentiel SVN distant, l'utiliser avec l'ensemble des fonctionnalités de GIT (y compris les validations partielles), puis le repousser dans le référentiel SVN.

git-svn (1)

Autres conseils

Tortoise SVN 1.8 prend désormais en charge cette fonctionnalité avec " restauration; commettre " fonctionnalité. Cela vous permet d’éditer un fichier, toutes les éditions étant annulées après la validation

Selon la documentation:

  

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

     
      
  1. dans la boîte de dialogue de validation, cliquez avec le bouton droit de la souris sur le fichier, choisissez & "restaurer après la validation" & ";
  2.   
  3. éditez le fichier, par exemple TortoiseMerge: annule les modifications que vous ne voulez pas encore valider
  4.   
  5. enregistrer le fichier
  6.   
  7. valider le fichier
  8.   

J'ai utilisé TortoiseSVN .

L'utilitaire de fusion intégré vous permet d'afficher un diff entre la version du référentiel et votre copie de travail.

Utiliser la fonction créer une sauvegarde de l'utilitaire diff

  1. Validez votre fichier comme si vous alliez valider toutes vos modifications.
  2. Dans la fenêtre de validation, double-cliquez sur le fichier pour afficher un diff.
  3. Dans les paramètres de diff, cliquez sur l'option pour sauvegarder le fichier d'origine .
  4. Cliquez avec le bouton droit de la souris sur les modifications que vous ne souhaitez pas utiliser, puis sélectionnez 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 pourquoi vous ne voulez enregistrer qu’une fois.
  6. Valider le changement.
  7. Remplacez l'original par le fichier .bak créé (qui contiendra toutes vos modifications d'origine).
  8. Engagez votre fichier.

Toutes vos modifications doivent maintenant être validées, en utilisant deux validations distinctes.

Essayez d’utiliser svn diff > out.patch puis copiez le fichier out.patch dans out.patch.add et out.patch.modify

.

Uniquement si vous disposez d'un fichier de correctif , rétablissez le fichier d'origine à l'aide de svn revert out.c.

Modifiez les fichiers de correctif à la main afin qu’ils ne contiennent que les Hunks à ajouter ou à modifier. Appliquez-les au fichier d'origine à l'aide de la commande patch, vérifiez si l'ajout a fonctionné, puis svn commit l'ajout.

Répétez le rinçage pour le svn co http://location/repository methodAdd patch.

Si les modifications sont séparées dans le fichier, comme indiqué dans votre question initiale - 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 convaincue que vous devriez avoir une raison de séparer vos commits.

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

  

svn co http://location/repository methodModify

     

svn up

Veillez à <=> effectuer des tests pour vous assurer que tout va bien.

Cela est possible avec TortoiseSvn (Windows) depuis la v1.8.

  

4.4.1. Le dialogue de validation

     

Si votre copie de travail est à jour et qu'il n'y a pas de conflit, vous êtes prêt à valider vos modifications. Sélectionnez n'importe lequel   fichier et / ou les dossiers que vous souhaitez valider, puis TortoiseSVN & # 8594; Commit ....

     

< snip >

     

4.4.3. N'engager que des parties de fichiers

     

Parfois, vous ne voulez valider que certaines parties des modifications apportées à un fichier. Une telle situation habituellement   arrive quand vous travaillez sur quelque chose, mais alors une solution urgente a besoin   être commis, et ce correctif se trouve être dans le même fichier que vous êtes   travaille sur.

     

cliquez avec le bouton droit sur le fichier et utilisez le menu contextuel & # 8594; Restaurer après commit.   Cela créera une copie du fichier tel quel. Ensuite, vous pouvez éditer le   fichier, par exemple dans TortoiseMerge et annulez tous les changements que vous ne voulez pas   commettre. Après avoir enregistré ces modifications, vous pouvez valider 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   n'ont pas été renvoyés.

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

J'avais l'habitude de faire ceci:

  • Dans mon éditeur (j'utilise vim), modifiez le fichier de sorte qu'un seul des changements apparaisse
  • Enregistrez le fichier (mais ne quittez pas l'éditeur)
  • Valide le fichier modifié dans svn
  • Hit " annuler " dans l'éditeur suffisamment de fois pour que le deuxième ensemble de modifications réapparaisse
  • Enregistrez à nouveau le fichier
  • Validez le deuxième ensemble de modifications.

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 commettrais les deux modifications sans m'en soucier.

Maintenant que j'utilise git, j'espère que je n'aurai jamais à le refaire!

J'utilise soit un dépôt Darcs local, soit tout simplement fusionner 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é):

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

fusionnez les modifications associées, sauvegardez 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 morceau non associé dans le fichier, rincez et répétez (mais pourquoi voudriez-vous attendre si longtemps avant de valider?!)

De même, si vous connaissez git, vous pouvez utiliser git-svn pour gérer un repo git local et synchronisez vos commits sur un serveur svn master; fonctionne très bien dans mon expérience limitée.

Essayez VisualSVN pour Visual Studio . La dernière version 6.1 introduit la fonctionnalité QuickCommit. Vous pouvez valider partiellement les modifications sélectionnées dans un fichier à l'aide des nouvelles commandes du menu contextuel Valider ce bloc et Valider la sélection dans l'éditeur Visual Studio.

 entrer la description de l'image ici

  1. Ouvrez tous les fichiers que vous souhaitez scinder dans l'éditeur de choix
  2. En utilisant un jeu d'outils différent (sous Win, utilisez la suggestion de Spike (l'ancienne version)), sortez le second jeu
  3. S'engager
  4. retournez dans l'éditeur de votre choix et enregistrez tous les fichiers

C’est un peu plus risqué que la suggestion complète de Spike mais cela peut être plus facile à faire. Assurez-vous également d’essayer d’abord quelque chose d’autre, car certains éditeurs refuseront de sauvegarder un fichier dont le nom a été modifié, à moins que vous ne rechargiez ce fichier (en perdant toutes vos modifications).

Je pense qu’une option plus facile que de générer des fichiers diff, de revenir en arrière, etc., consisterait à extraire deux copies du référentiel, et à utiliser un outil de diff visuel comme DeltaWalker pour copier des morceaux de fichiers de l'un à l'autre.

La première copie serait celle sur laquelle vous travailleriez, et la seconde ne servirait qu’à cette fin. Une fois que vous avez apporté une tonne de modifications à la première, vous pouvez copier une section sur la seconde, la valider, copier une autre section, la valider, etc.

  1. Copiez tous les fichiers modifiés concernés pour sauvegarder des copies.
  2. Créez un patch de l'état de fonctionnement à l'aide de svn diff.
  3. Rétablissez les fichiers à l'aide de svn revert.
  4. Réappliquez les parties du correctif que vous souhaitez valider, soit à l'aide de l'outil patch, soit par édition manuelle, ou peu importe.
  5. Exécutez diff ensuite pour comparer votre copie de travail à votre copie de sauvegarde afin de vous assurer que les correctifs ont été appliqués correctement.
  6. Construire et tester.
  7. Commit.
  8. Copiez vos copies de sauvegarde dans votre extraction de référentiel.
  9. Répétez l'opération à l'étape 2. (pas à l'étape 1.!) jusqu'à la fin.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top