Comment appliquer un patch de diff sur Windows?

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

    Avec TortoiseMerge:

    1. Rechercher et ouvrir un répertoire de repo SVN existant
    2. Créez un nouveau répertoire nommé “merges” s’il n’existe pas déjà
    3. Copiez le fichier sur lequel vous souhaitez appliquer le fichier .patch
    4. ADD et COMMIT dans le repository svn avant de continuer à l’étape suivante
    5. Faites un clic droit sur les fusions et choisissez Appliquer le patch …
    6. Double-cliquez sur le fichier dans la liste
    7. Le fichier corrigé avec diff est affiché dans le volet de droite
    8. Cliquez sur ce volet et cliquez sur Enregistrer ou exporter avec Fichier-> Enregistrer sous …

    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: Screeny

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

    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:

    • Sélectionnez le menu Fichier -> Nouveau projet
    • Dans la boîte de dialog qui en résulte, faites-en un projet d’application Java . Donnez-lui un nom dans la boîte de dialog et cliquez sur Terminer .
    • Cliquez avec le bouton droit sur le nom de votre projet et sélectionnez Propriétés dans le menu contextuel.
    • Dans la boîte de dialog résultante, sélectionnez Sources et ajoutez un dossier source . Accédez à votre source Java.

    Maintenant que vous avez un projet, appliquez le correctif:

    • Mettez en surbrillance votre projet pour le sélectionner
    • Dans le menu principal, sélectionnez le menu Outils -> Appliquer le correctif
    • Dans la boîte de dialog qui apparaît, naviguez jusqu’à votre fichier de patch, sélectionnez-le et appuyez sur le bouton Patch.

    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.