Il existe de nombreux programmes pouvant créer un correctif diff, mais j'essaye énormément de l'appliquer. J'essaie de distribuer un correctif et un utilisateur m'a posé une question sur la façon de l'appliquer. J'ai donc essayé de comprendre par moi-même et j'ai découvert que je n'avais aucune idée, et la plupart des outils que je peux trouver sont des lignes de commande. (Je peux gérer une ligne de commande, mais beaucoup de personnes seraient perdues sans une interface graphique agréable et conviviale. Elles ne sont donc pas bonnes à cette fin.)
J'ai essayé d'utiliser TortoiseSVN. J'ai le patch que je voudrais appliquer. Je clique avec le bouton droit de la souris sur le correctif. Sous le sous-menu TortoiseSVN, une option indique "Appliquer le correctif". Tout ce qu'il fait, c'est ouvrir une fenêtre vide.
Alors j'ai essayé de frapper Open. Il y a deux options: fusionner et appliquer des différences unifiées. (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 fichier fichier auquel appliquer le correctif! Donc TortoiseSVN ne fonctionne tout simplement pas. Existe-t-il un utilitaire basé sur une interface graphique Windows qui prend un correctif et un fichier et l’applique correctement?
EDIT: Si l’on regarde les réponses jusqu’à présent, il semble que Tortoise ne le fera correctement que si le fichier est déjà versionné. Ce n'est pas le cas ici. Je dois pouvoir appliquer un correctif à un fichier qui ne provient pas d'un référentiel SVN. J'ai juste essayé d'utiliser Tortoise, car je sais que SVN utilise des diffs et doit savoir comment les créer et les appliquer.
Appliquer le correctif
Screeny alternative si vous ouvrez de TortoiseMerge. Dans l’écran ci-dessous, le répertoire fait référence au répertoire "merges" mentionné à l’étape 2 ci-dessus:
Capture d'écran de l'interface graphique WinMerge:
TortoiseMerge est un utilitaire séparé fourni avec TortoiseSVN.
Il peut aussi être téléchargé séparément dans l’archive TortoiseDiff.Zip . Cela vous permettra d’appliquer des différences unifiées à des fichiers non versionnés.
J'ai fait pure Python rien que pour ça. Son comportement multi-plateformes est prévisible. Même s'il ne crée pas de nouveaux fichiers (au moment de l'écriture de ceci) et manque d'une interface graphique, il peut être utilisé comme une bibliothèque pour créer un outil graphique.
[~ # ~] update [~ # ~] : Il devrait être plus pratique de l'utiliser si vous avez Python = installé.
pip install patch
python -m patch
Je sais que vous avez dit que vous préféreriez une interface graphique, mais les outils en ligne de commande feront le travail correctement. Voir GnuWin pour un port d’outils Unix vers Windows. Vous auriez besoin de la commande patch, évidemment ;-)
Vous pouvez cependant rencontrer un problème avec la terminaison de ligne. Le port GnuWin supposera que le fichier de correctif possède une terminaison de ligne de style DOS (CR/LF). Essayez d'ouvrir le fichier de correctif dans un éditeur raisonnablement intelligent et il le convertira pour vous.
Dans TortoiseSVN, l’application de correctifs fonctionne. Vous devez appliquer le correctif au même répertoire que celui où il a été créé . Il est toujours important de garder cela à l'esprit. Alors, voici comment vous faites dans TortoiseSVN:
Faites un clic droit sur le dossier auquel vous souhaitez appliquer le correctif. Il présentera une boîte de dialogue demandant l'emplacement du fichier de correctif. Sélectionnez le fichier et cela devrait ouvrir une petite fenêtre de liste de fichiers qui répertorie les fichiers modifiés. Cliquez sur chaque élément pour ouvrir une fenêtre de diff indiquant ce que le correctif est sur le point de faire pour ce fichier.
Bonne chance.
Vous pouvez utiliser this le port natif Win32 de l’utilitaire de correctif.
Il vient avec une plus grande sélection d'autres utilitaires et contrairement à Cygwin et similaire, il n'a pas besoin de DLL ou similaire. Il suffit de choisir votre petit exécutable de choix et de le stocker où vous voulez.
Utilisation simple:
patch.exe -i <patchfile>
Obtenez plus d'aide:
patch.exe --help
L’utilitaire patch.exe de l’installation de Git fonctionne sous Windows 10.
Installez Git pour Windows puis utilisez la commande "C:\Program Files\Git\usr\bin\patch.exe"
Pour appliquer un correctif.
Si un message d'erreur tel que Hunk #1 FAILED at 1 (different line endings).
a été obtenu lors de l'application d'un correctif, essayez d'ajouter le -l
(Il s'agit d'un raccourci pour le --ignore-whitespace
) Ou le --binary
Passe à la ligne de commande.
EDIT: Si l’on regarde les réponses jusqu’à présent, il semble que Tortoise ne le fera correctement que si le fichier est déjà versionné. Ce n'est pas le cas ici. Je dois pouvoir appliquer un correctif à un fichier qui ne provient pas d'un référentiel SVN. J'ai juste essayé d'utiliser Tortoise parce que je sais que SVN utilise des diffs et doit savoir comment les créer et les appliquer.
Vous pouvez installer Cygwin , puis utilisez l'outil en ligne de commande patch pour appliquer le correctif. Voir aussi cette page de manuel Unix , qui s'applique à patch.
Il semble que TortoiseSVN (TortoiseMerge) nécessite la ligne Index: foobar.py
dans le fichier diff/patch. C'est ce que je devais faire pour faire fonctionner un fichier de correctif non-TortoiseSVN avec le clic droit de TortoiseSVN Appliquer le correctif.
Avant:
--- foobar.py.org Sat May 08 16:00:56 2010
+++ foobar.py Sat May 08 15:47:48 2010
Après:
Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py (working copy)
Ou si vous connaissez la révision spécifique à partir de laquelle votre contributeur travaillait:
Index: foobar.py
===================================================================
--- foobar.py (revision 1157)
+++ foobar.py (working copy)
Eclipse devrait pouvoir le faire, aller dans la perspective TeamSynchronize puis dans Projet-> Appliquer le correctif
Pour les projets Java, j’ai utilisé NetBeans pour appliquer des fichiers de correctif. Si le Java que vous corrigez n’est pas déjà un NetBeans projet, créez-lui un projet. Pour créer un nouveau projet:
Maintenant que vous avez un projet, appliquez le correctif:
C'est ça. Votre correctif doit être appliqué et une fenêtre de diff devrait apparaître, indiquant les modifications.
Si vous utilisez Mercurial , cela se fait via "import". Donc, sur la ligne de commande, la commande hg import
, Ou (vous pouvez trouver l’option --no-commit
Utile), ou "Repository" => "Import ..." dans Hg Workbench.
Notez que ceux-ci valideront les modifications par défaut. vous pouvez éviter cela en utilisant l'option hg import --no-commit
si vous utilisez la ligne de commande ou si vous avez utilisé Hg Workbench, il pourrait être utile d'émettre hg rollback
après la fusion.
Le correctif indique à quel fichier s’appliquer. L'en-tête devrait ressembler à quelque chose comme ça (voyez-le dans le Bloc-notes ou votre éditeur de texte préféré):
--- Folder/old_file
+++ Folder/new_file
Dans le cas d'un correctif Subversion, vous auriez également des numéros de révision (car les noms de fichiers sont les mêmes).
GNU patch vous permettra de remplacer ces noms, mais je ne connais aucun outil graphique permettant de faire la même chose. Je vérifierais avec les différents programmes de diff - cependant, il ne semble pas que WinMerge supporte l’application de correctifs.
Un port BusyBox pour Windows comporte à la fois une commande diff et une commande patch, mais ils ne prennent en charge que le format unifié.
J'utilise déjà Beyond Compare (commercial) pour les diffs et les fusions, et cet outil aussi a la capacité de créer, afficher et appliquer des correctifs.
Avez-vous deux moniteurs? J'avais le même problème avec TortoiseMerge et je me suis rendu compte que lorsque j'ai désactivé l'un des moniteurs, la petite fenêtre avec la liste des fichiers s'est affichée. J'espère que cela vous aide.
Si vous obtenez le message d'erreur "Pas une copie de travail", essayez de sélectionner un répertoire dans la boîte de dialogue TortoiseMerge, qui est un répertoire de travail de SVN.
Il suffit d'utiliser:
patch -p0 < path-file.patch
n'oubliez pas d'exécuter cette commande uniquement à partir du dossier où vous avez créé le correctif.
Lorsque vous appliquez des correctifs à l'aide de TortoiseSVN, j'enregistre généralement le chemin d'accès à la racine du référentiel extrait. Vous devriez alors pouvoir faire un clic droit sur le patch, aller au menu TortoiseSVN, et cliquer sur ApplyPatch. ApplyPatch doit automatiquement déterminer le niveau de la hiérarchie de répertoires dans lequel le correctif a été créé.
Cependant, j’ai eu des problèmes avec l’application de correctifs contenant de nouveaux fichiers ou impliquant le renommage de fichiers. Quel que soit l'algorithme utilisé par Tortoise, cela ne semble pas très bien gérer ces scénarios. Unicode peut vous donner des problèmes similaires.
J'utilise MSYS2 à partir de http://www.msys2.org/
Il fournit de nombreux utilitaires comme patch
, which
, git
, tree
et bien d'autres.
Après avoir installé MSYS2, lancez simplement le gestionnaire de paquets pour installer patch
:
pacman -S patch