151 votes

Comment appliquer un patch diff sur Windows ?

Il existe de nombreux programmes qui permettent de créer un patch diff, mais j'ai beaucoup de mal à en appliquer un. J'essaie de distribuer un patch, et j'ai reçu une question d'un utilisateur sur la façon de l'appliquer. J'ai donc essayé de le découvrir par moi-même et je me suis rendu compte que je n'en avais aucune idée, et que la plupart des outils que j'ai pu trouver sont en ligne de commande. (Je peux gérer une ligne de commande, mais beaucoup de gens seraient perdus sans une interface graphique agréable et conviviale. Ceux-ci ne sont donc pas bons pour cet objectif).

J'ai essayé d'utiliser TortoiseSVN. J'ai le patch que je voudrais appliquer. Je fais un clic droit sur le patch, et il y a une option sous le sous-menu TortoiseSVN qui dit "Appliquer le patch". Tout ce qu'il fait est de tirer vers le haut une fenêtre vide.

J'ai donc essayé de cliquer sur Ouvrir. Il y a deux options : fusionner et appliquer unified diff. (Le patch est au format diff unifié, heureusement.) Mais l'option apply ne fonctionne tout simplement pas : Elle demande le patch et un dossier. D'une manière ou d'une autre, il a oublié de demander le pour appliquer le patch ! Donc TortoiseSVN ne fonctionne tout simplement pas. Y a-t-il un utilitaire Windows basé sur une interface graphique qui prendra un patch et un fichier et l'appliquera correctement ?

EDIT : En regardant les réponses jusqu'à présent, il semble que Tortoise ne le fera correctement que si c'est un fichier qui est déjà versionné. Ce n'est pas le cas ici. J'ai besoin d'être capable d'appliquer un patch à un fichier qui n'est pas sorti d'un dépôt SVN. J'ai juste essayé d'utiliser Tortoise, parce que je sais que SVN utilise les diffs et doit savoir comment les créer et les appliquer.

0 votes

La réponse de WinMerge semblait bonne mais n'explique que comment faire un patch, pas comment l'appliquer. TortoiseHG a un excellent moyen d'appliquer des correctifs, mais seulement aux fichiers qui sont dans un repo hg, autant que je sache. Si le SVN externe TortoiseDiff ne peut pas le faire, je me demande si un outil GUI le peut.

3 votes

Wow, vous avez raison, la réponse courte est toujours non - au moins dans WinMerge. Demande de fonctionnalité sur WinMerge ici sourceforge.net/tracker/

0 votes

Il n'a pas "oublié" de demander le fichier auquel appliquer le patch, le nom du fichier est contenu dans le patchfile.

33voto

Sheriff Md Points 461

Appliquer le patch

Avec TortoiseMerge :

  1. Trouver et ouvrir un répertoire de repo SVN existant
  2. Créer un nouveau répertoire nommé "merges", s'il n'existe pas déjà
  3. Copiez le fichier sur lequel vous voulez appliquer le fichier .patch.
  4. Ajouter et COMMIT au dépôt svn avant de passer à l'étape suivante.
  5. Cliquez à droite sur les fusions et choisissez Appliquer le patch...
  6. Double-cliquez sur le fichier dans la liste
  7. Le fichier patché avec le diff est affiché dans le panneau de droite.
  8. Cliquez sur ce volet et appuyez sur Guardar ou exporter avec Fichier->Enregistrer sous...

Ecran alternatif si vous ouvrez à partir de TortoiseMerge. Dans l'écran ci-dessous, le répertoire fait référence au répertoire "merges" mentionné à l'étape 2 ci-dessus : Screeny

Capture d'écran de l'interface graphique de WinMerge : Screeny

0 votes

@WarrenP : oui, il explique comment appliquer le patch en utilisant TortoiseMerge.

4 votes

Mon commentaire avait un sens avant les modifications, et n'en a plus après les modifications. Êtes-vous encore confus ? L'horodatage de l'édition ci-dessus (mar 24, '11) semble être incorrect, puisque le PO a édité sa réponse à nouveau depuis octobre 2011. Je pense que l'horodatage de mon commentaire est également incorrect.

10 votes

@SheriffMd Ne recevez vous pas l'erreur " D:\Folder n'est pas une copie de travail" ?

21voto

techtonik Points 2945

J'ai fait outil purement Python juste pour ça. Il a un comportement multiplateforme prévisible. Bien qu'il ne crée pas de nouveaux fichiers (au moment où j'écris ces lignes) et qu'il ne dispose pas d'une interface graphique, il peut être utilisé comme une bibliothèque pour créer des outils graphiques.

UPDATE : Il devrait être plus pratique de l'utiliser si vous avez installé Python.

pip install patch
python -m patch

1 votes

Je l'utilise beaucoup. Merci @techtonik. Des nouvelles sur son fonctionnement avec Python3 ?

0 votes

Exécutez pip install patch avec les droits d'administration pour être sûr que cela fonctionne.

0 votes

@Vertexwahn est-il sous Linux ?

18voto

Paul Shannon Points 189

TortoiseMerge est un utilitaire séparé qui est fourni avec TortoiseSVN.

Il peut également être téléchargé séparément dans la rubrique TortoiseDiff.zip archive. Cela vous permettra d'appliquer des diffs unifiés à des fichiers non-versionnés.

22 votes

AFAIK, cela ne peut pas appliquer de patch sur un fichier non-versionné.

0 votes

Je n'ai pas eu de problème à l'appliquer à un fichier non versionné.

0 votes

D'autres en ont envie :S.

16voto

Sardaukar Points 3385

Je sais que vous avez dit que vous préfériez une interface graphique, mais les outils en ligne de commande feront très bien l'affaire. Voir GnuWin pour un portage d'outils Unix sur Windows. Vous auriez besoin de la commande patch, évidemment ;-)

Vous pourriez rencontrer un problème avec la terminaison de ligne, cependant. Le portage GnuWin supposera que le patchfile a une terminaison de ligne de style DOS (CR/LF). Essayez d'ouvrir le patchfile dans un éditeur raisonnablement intelligent et il le convertira pour vous.

0 votes

Bien dit. Je n'aurais pas pu comprendre le problème de la terminaison de ligne sans ce commentaire.

0 votes

Une autre façon de gérer les fins de ligne est d'ajouter l'option "--binary" à la ligne de commande.

4 votes

C'est ce qui m'a mis sur la bonne voie. Cependant, si vous utilisez Windows 7 ou une version plus récente, vous devez mettre à jour le manifeste de patch.exe pour éviter que l'UAC apparaisse à chaque fois. Voir cette page pour le mode d'emploi : math.nist.gov/oommf/software-patchsets/patch_on_Windows7.html

7voto

user37078 Points 2328

Dans TortoiseSVN, l'application de patch fonctionne. Vous devez appliquer le patch dans le même répertoire que celui où il se trouvait. créé à partir de . Il est toujours important de garder cela à l'esprit. Donc voici comment vous faites dans TortoiseSVN :

Faites un clic droit sur le dossier auquel vous voulez appliquer le patch. Une boîte de dialogue vous demandant l'emplacement du fichier patch apparaîtra. Sélectionnez le fichier et cela devrait ouvrir une petite fenêtre de liste de fichiers qui énumère les fichiers modifiés, et cliquer sur chaque élément devrait ouvrir une fenêtre de différence qui montre ce que le patch est sur le point de faire à ce fichier.

Bonne chance.

9 votes

Cela n'aide pas. Les fichiers de destination ne proviennent pas d'une archive SVN. (Voir la modification du message original).

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