web-dev-qa-db-fra.com

Tous les correctifs GIT que je crée jettent un coup fatal: entrée non reconnue

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

11
lacostenycoder

Actualisé

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
16
lacostenycoder

Il y a un problème de format dans le fichier patch. Pour corriger le fichier de chemin:

  1. Ouvrez votre fichier de patch dans notepad ++ puis entrez ces deux menus:

    Encoding/Convert to UTF-8
    Edit/EOL conversion/Unix (LF)
    
  2. Courir:

    git apply --reject --whitespace=fix your_patch.patch
    
25
Nguyễn Đạt

Nous avons essayé de déboguer cela pendant quelques heures. Ce qui a finalement fonctionné était le suivant:

  1. Fichier de patch ouvert avec un éditeur comme VS Code
  2. Modification de l'encodage en UTF-8
  3. Changement de fin de ligne de CRLF à LF
  4. Enregistré le nouveau fichier
  5. git apply myPatch.patch travaillé
5

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
2
saurabheights

Sous Windows, pour Visual Studio:

  1. Ouvrez le dossier
  2. Depuis le menu: Fichier -> Enregistrer nom de fichier sous ...
  3. Sélectionnez "Enregistrer avec l'encodage ..."

Save with Encoding

  1. Sélectionnez les éléments suivants:
    • Encodage: UTF-8 avec/sans signature
    • Fin de ligne: Unix (LF)

Encoding Options

  1. Sauvegardez le fichier
  2. Courir git apply MyPatch.patch encore
0
Hadi Fooladi Talari