Est-il possible de dire de patch
ne pas générer .orig
et de .rej
fichiers? Je trouve extrêmement ennuyeux que le patch les crée.
Si vous ne donnez aucune option à patch
autre que -pN
, il ne crée ces fichiers que lorsqu'un correctif ne s'applique pas correctement.
Ainsi, une option consiste à arrêter de créer (ou d'accepter) de mauvais correctifs. :)
De retour dans le monde réel, c'est une fonctionnalité. Lorsque patch(1)
ne parvient pas à appliquer un segment de correctif au fichier d'origine, il enregistre durablement la copie du fichier d'origine temporaire sous *.orig
, vide le segment rejeté *.rej
et continue d'essayer d'appliquer des segments de correctif. L'idée est que vous pouvez ouvrir le *.rej
fichier et terminer le processus de patch manuellement en copiant des morceaux dans le fichier patché. Le *.orig
fichier peut également être utile lorsque le processus de correction détruit accidentellement quelque chose et que vous devez vous référer à la version d'origine pour le réparer.
Je ne corrige pas toujours un mauvais patch avec le texte des fichiers *.rej
et *.orig
, mais c'est bien de les avoir au cas où j'en aurais besoin.
Une fois que j'ai corrigé un mauvais correctif, j'exécute le script suivant à la racine du projet pour nettoyer rapidement les choses:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
Je l'appelle cleanup-after-bad-patch
parce que le nom long assure partiellement contre l'exécution accidentelle, car il pourrait supprimer les fichiers dont vous avez encore besoin. Pour être honnête, cependant, je l'exécute normalement en tapant clean
TabEnter, cela suffit pour trouver ce script dans PATH
sur mes machines de développement.
Les modèles supplémentaires qu'il vérifie concernent les fichiers générés par mon système de contrôle de version de choix lorsqu'il rencontre le même problème lors d'une opération de fusion. Vous pouvez l'ajuster pour vos outils VCS / SCM .
Pour dire correctif ne pas produire des sauvegardes omettre seulement les -b
et toutes les --backup-...
options.
Pour lui demander de ne pas créer de .rej
fichiers, ajoutez l' -r -
option à la commande.
GNU patch 2.6
mac peut-être essayer-r /dev/null
L'
--no-backup-if-mismatch
option évitera les fichiers ".orig".Vous pouvez également essayer l'
--merge
option, qui crée un conflit dans le fichier.Dans tous les cas, vous devriez avoir un moyen de revenir rapidement à un bon état si la fusion devient écrasante.
la source
Je suis bloqué avec le patch v2.5.4 où
-r -
il crée des fichiers de rejet nommés-
.J'ai trouvé que, par
--reject-file=
exemple, une valeur vide entraîne l'échec du correctif avec le code de sortie2
SI il essaie d'écrire un fichier de rejet. S'il n'y a aucun rejet, cela fonctionne comme prévu. Bien qu'il ne s'agisse pas d'une solution complète pour l'ancienne version du correctif, dans certaines circonstances, cela peut être acceptable ou souhaité.la source
Le mieux que j'ai pu trouver (certes un moyen de balayer la saleté sous le tapis) est d'utiliser
-r <tmpfile>
, à savoir:# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
car dans la v2.5.8,
-r -
crée réellement le-
fichier.la source
patch -p1 -B / dev / null -r - <fichier.patch
la source
-B
indicateur n'envoie pas la*.orig
sortie à/dev/null
, comme il apparaît à partir de votre commande. Il arrive juste que les utilisateurs normaux ne puissent pas écrire dans des fichiers appelés des choses comme/dev/nullfoo.cpp
. Si vous le faites en tant que root, vous obtiendrez à la/dev
place des ordures dans votre arbre. Deuxièmement,-r -
ne supprime pas le*.rej
fichier. Cela semble juste le faire parce que l'erreur due au faux-B
drapeau l'empêche de vous montrer ce qu'il ferait vraiment sans-B
, qui est de créer un fichier appelé-
dans le répertoire courant.man patch
: "-r Placer les rejets dans le fichier de rejet au lieu du fichier .rej par défaut. Lorsque le fichier de rejet est -, rejeter les rejets."