J'utilise Mac OSX 10.9.4 (Mavericks) et j'ai la version 2.8.2 de git. J'ai testé cela avec un tout nouveau dépôt. Voici un exemple.
mkdir gitest
cd gitest
git init
echo "monkeyface" > monkey.txt
git commit -m "first commit"
echo "monkeyface farted" > monkeyfart.txt
git add .
git diff HEAD > new.patch
rm monkeyfart.txt
git reset --hard HEAD
git apply new.patch --check
>fatal: unrecognized input
Des idées ce qui cause cela? Serait-ce quelque chose dans mon fichier .gitconfig?
[user]
name = myusername
email = [email protected]
[color]
ui = always
[alias]
st = status -sb -uall
lg = log --decorate --pretty=oneline --abbrev-commit --graph
undocommit = reset --soft HEAD^
undopush = Push -f Origin HEAD^:master
[core]
editor = vim
excludesfile = ~/.gitignore_global
pager = less -r
[commit]
template = ~/.gitmessage.txt
[filter "media"]
clean = git-media-clean %f
smudge = git-media-smudge %f
METTRE À JOUR:
Bien que la réponse liée ci-dessous donne une idée de ce qu'aurait pu être le problème, mon problème était spécifiquement caché dans ma configuration car aucun argument de couleur n'était transmis à la commande. Cette réponse est pertinente, mais ma question et ma réponse pourraient être utiles à d'autres qui pourraient rencontrer un problème similaire.
Extraire les modifications du fichier diff vers la branche actuelle
Vous pourriez avoir un fichier qui n'a pas été encodé en UTF-8. Pour résoudre ce problème sur les systèmes * nix (MacOS, Linux, etc.)
iconv -f ascii -t utf-8 fix.patch -o fix_utf8.patch
Pour les fenêtres, vous pouvez essayer:
Get-Content .\fix.patch | Set-Content -Encoding utf8 fix_utf8.patch
Si votre fichier contient déjà des codes de couleur, vous pouvez essayer:
git apply --reject --whitespace myfile.patch
La transmission des paramètres de couleur semble résoudre le problème.
git diff HEAD --color=never > fix.patch
Et maintenant, check ne renvoie aucun message d'erreur.
git apply fix.patch --check
Changer mon fichier .gitconfig de
[color]
ui = always
changer pour toujours
[color]
ui = auto
Correction de mon problème, je n'ai donc pas à passer l'option de couleur lors de la différence avec le fichier de patch.
MISE À JOUR: D'après la réponse de saurabheights, vous n'avez même pas besoin de brew link gnu-sed
, vous pouvez le faire avec de la perle. Cela supprimera également les caractères de couleur du mauvais fichier de correctif. Il existe probablement de nombreuses façons de procéder.
Perl -pe 's/\x1b.*?[mGKH]//g' bad.patch > good.patch
Il y a un problème de format dans le fichier patch. Pour corriger le fichier de chemin:
Ouvrez votre fichier de patch dans notepad ++ puis entrez ces deux menus:
Encoding/Convert to UTF-8
Edit/EOL conversion/Unix (LF)
Courir:
git apply --reject --whitespace=fix your_patch.patch
Nous avons essayé de déboguer cela pendant quelques heures. Ce qui a finalement fonctionné était le suivant:
VS Code
UTF-8
CRLF
à LF
git apply myPatch.patch
travailléPour ceux qui ont déjà un patch avec des codes de couleur, essayez ceci: -
Le bunt: -
cat incorrect.patch | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > correct.patch
Sur Mac, installez gsed en utilisant: -
brew link gnu-sed
et pour générer un fichier correctif correct: -
cat incorrect.patch | gsed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > correct.patch
Sous Windows, pour Visual Studio:
git apply MyPatch.patch
encore