Il existe de nombreux programmes qui peuvent créer un patch de diff, mais j’ai du mal à en appliquer un. J’essaie de dissortingbuer un patch et un utilisateur m’a demandé comment l’appliquer. J’ai donc essayé de me débrouiller tout seul et j’ai découvert que je n’avais aucune idée, et la plupart des outils que je peux trouver sont en ligne de commande. (Je peux gérer une ligne de commande, mais beaucoup de personnes seraient perdues sans une interface graphique conviviale. Celles-ci ne sont donc pas utiles à cette fin.)
J’ai essayé d’utiliser TortoiseSVN. J’ai le patch que j’aimerais appliquer. Je clique avec le bouton droit sur le patch, et il existe une option dans le sous-menu TortoiseSVN qui dit “Appliquer le correctif”. Tout ce qu’il fait, c’est une fenêtre vide.
Donc j’ai essayé de bash Open. Il a deux options: fusionner et appliquer un diff unifié. (Le correctif est dans un format diff unifié, heureusement.) Mais l’option appliquer simplement ne fonctionne pas: elle demande le correctif et un dossier. D’une certaine manière, il a oublié de demander le fichier pour appliquer le correctif! Donc TortoiseSVN ne fonctionne tout simplement pas. Existe-t-il un utilitaire graphique basé sur Windows qui prend un correctif et un fichier et l’applique correctement?
EDIT: En regardant les réponses jusqu’à présent, il semble que Tortoise ne le fera que s’il s’agit d’un fichier déjà versionné. Ce n’est pas le cas ici. Je dois pouvoir appliquer un correctif à un fichier qui n’est pas sorti d’un référentiel SVN. Je viens d’essayer d’utiliser Tortoise, car je sais que SVN utilise diffs et doit savoir comment les créer et les appliquer.
Appliquer le patch
Screeny alternatif si vous ouvrez depuis 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 de WinMerge:
TortoiseMerge est un utilitaire séparé fourni avec TortoiseSVN.
Il peut également ê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.
Je sais que vous avez dit préférer une interface graphique, mais les outils en ligne de commande feront le travail correctement. Voir GnuWin pour un port des outils Unix sur Windows. Vous auriez besoin de la commande de patch, évidemment 😉
Vous risquez cependant de rencontrer un problème avec la terminaison de ligne. Le port GnuWin supposera que le fichier de correctifs 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.
J’ai créé un outil Python pur pour cela. Son comportement multi-plateforme est prévisible. Bien qu’il ne crée pas de nouveaux fichiers (au moment d’écrire ceci) et ne possède pas d’interface graphique, il peut être utilisé comme bibliothèque pour créer un outil graphique.
UPDATE : Il devrait être plus pratique de l’utiliser si Python est installé.
pip install patch python -m patch
Dans TortoiseSVN, l’application des correctifs fonctionne. Vous devez appliquer le correctif au même répertoire que celui à partir duquel il a été créé . Il est toujours important de garder cela à l’esprit. Alors, voici comment vous le faites dans TortoiseSVN:
Cliquez avec le bouton droit sur le dossier auquel vous souhaitez appliquer le patch. Il présentera une boîte de dialog 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, et cliquer sur chaque élément devrait ouvrir une fenêtre de diff qui montre ce que le correctif est sur le sharepoint faire pour ce fichier.
Bonne chance.
Vous pouvez utiliser ce port natif Win32 de l’utilitaire de correctif.
Il vient avec un plus grand choix d’autres utilitaires et contrairement à Cygwin et similaires, 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
Obtenez plus d’aide:
patch.exe --help
EDIT: En regardant les réponses jusqu’à présent, il semble que Tortoise ne le fera que s’il s’agit d’un fichier déjà versionné. Ce n’est pas le cas ici. Je dois pouvoir appliquer un correctif à un fichier qui n’est pas sorti d’un référentiel SVN. Je viens d’essayer d’utiliser Tortoise car je sais que SVN utilise diffs et doit savoir comment les créer et les appliquer.
Vous pouvez installer Cygwin , puis utiliser l’outil de correction de ligne de commande 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 qu’un fichier de patch non-TortoiseSVN fonctionne avec TortoiseSVN, cliquez avec le bouton droit sur la commande Apply Patch .
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 à laquelle votre consortingbuteur travaillait:
Index: foobar.py =================================================================== --- foobar.py (revision 1157) +++ foobar.py (working copy)
L’utilitaire patch.exe de l’installation 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 qu’un Hunk #1 FAILED at 1 (different line endings).
a été obtenu sur la sortie lors de l’application d’un patch, essayez d’append les commutateurs -l
(qui est un raccourci pour --ignore-whitespace
) ou --binary
à la ligne de commande.
Le correctif lui indique quel fichier appliquer. L’en-tête devrait être quelque chose comme ça (affichez-le dans le Bloc-notes ou votre éditeur de texte favori):
--- Folder/old_file +++ Folder/new_file
Dans le cas d’un patch Subversion, vous avez également des numéros de révision (puisque les noms de fichiers sont les mêmes).
Le patch GNU vous permettra de remplacer ces noms, mais je ne connais aucun outil graphique pour faire la même chose. Je vérifierais avec les différents programmes de diff – cependant, il ne semble pas que WinMerge prenne en charge l’application des correctifs.
Eclipse devrait pouvoir le faire, allez dans la perspective TeamSynchronize, puis dans Project-> Apply patch
Pour les projets Java, j’ai utilisé NetBeans pour appliquer des fichiers de correctifs. Si le code Java que vous appliquez n’est pas déjà un projet NetBeans, créez-en un projet. Pour créer un nouveau projet:
Maintenant que vous avez un projet, appliquez le correctif:
C’est tout. Votre patch doit être appliqué, et vous devriez voir une fenêtre d’affichage montrant les modifications.
Si vous utilisez Mercurial , cela se fait via “import”. Donc, à la ligne de commande, la commande d’ hg import
, ou (vous pouvez trouver l’option --no-commit
utile), ou “Repository” => “Importer …” dans Hg Workbench.
Notez que ceux-ci commettront 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, vous pourriez trouver utile d’émettre une hg rollback
après la fusion.
Lors de l’application de correctifs à l’aide de TortoiseSVN, je sauvegarde généralement le chemin dans la racine du référentiel extrait. Vous devriez alors pouvoir faire un clic droit sur le patch, aller dans le menu TortoiseSVN et cliquer sur ApplyPatch. ApplyPatch doit automatiquement déterminer quel niveau de la hiérarchie de répertoires le patch a été créé.
Cependant, j’ai eu des problèmes dans le passé avec l’application de correctifs contenant de nouveaux fichiers ou impliquant des renommages 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.
Avez-vous deux moniteurs? J’avais le même problème avec TortoiseMerge et je me suis rendu compte que lorsque je désactivais l’un des moniteurs, la petite fenêtre avec la liste de fichiers apparaissait. J’espère que cela vous aidera.
Si vous obtenez un message d’erreur “Pas une copie de travail”, essayez de sélectionner un répertoire dans la boîte de dialog TortoiseMerge, qui est un répertoire de travail de SVN.
Un port BusyBox pour Windows possède à la fois une commande diff et une commande patch, mais ils ne prennent en charge que le format unifié.
J’utilise déjà BeyondCompare (commercial) pour diffs et fusions, et cet outil a également la capacité de créer, d’afficher et d’appliquer des correctifs.
J’utilise MSYS2 depuis http://www.msys2.org/
Il fournit de nombreux utilitaires tels que patch
, which
, git
, tree
et bien d’autres.
Après avoir installé MSYS2, lancez simplement le gestionnaire de paquets pour installer le patch
:
pacman -S patch
Utilisez simplement:
patch -p0 < path-file.patch
N'oubliez pas d'exécuter cette commande uniquement à partir de l'emplacement du dossier où vous avez créé le correctif.