Le message d'erreur suivant s'affiche lorsque j'essaie de mettre en scène une ou plusieurs lignes à l'aide de l'interface graphique (clic droit -> lignes d'étape pour la validation). Ce n'est pas la première fois que cela m'arrive, et j'en ai trouvé d'autres qui y font face. Cependant, je n'ai pas trouvé comment le résoudre.
Est-ce que quelqu'un a déjà rencontré ce problème? est-ce que je peux faire quelque chose (la mise en scène de tout le fichier n'est pas une vraie solution)
Mise à jour: Voici un fichier qui me donne l'erreur suivante lorsque j'essaie de mettre en scène la ligne supprimée.
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:src="@drawable/texture"
Android:tileMode="repeat"
- Android:dither="true"
>
</bitmap>
\ No newline at end of file
Voici le message d'erreur:
fatal: corrupt patch at line 14
étrangement l'amende suivante n'a même pas 14 lignes!? note le fichier de fin avec une nouvelle ligne n'a pas résolu le problème
Apparemment, l'interface graphique de Git requiert que les fichiers se terminent par une nouvelle ligne lors de la mise en place de lignes individuelles .
Je suis à peu près sûr que, au moins à un moment donné, la mise en place de lignes individuelles s'est bien déroulée, même sans nouvelle ligne à la fin du fichier, mais apparemment, cela n'est plus possible. Je viens juste de rencontrer ce problème moi-même, le fait que les nouvelles lignes à la fin du fichier le corrigent et que leur suppression le cause.
En fait, cela se produit souvent lorsque vous éditez des lignes "-".
Lorsque vous supprimez '-' et oubliez d’ajouter '' (espace) à la place
Ou, par erreur, vous ajoutez deux espaces et vous utilisez des "onglets" comme identifiant
Ouvrez votre patch et vérifiez que toutes les lignes que vous voulez laisser intactes commencent par '' (une espace)
J'ai vu que certaines personnes utilisaient --ignore-space-change
--ignore-whitespace
--whitespace=fix
comme solution de contournement, mais vous ne devez pas mélanger cela.
Ouvrez votre patch et vérifiez que toutes les lignes que vous voulez laisser intactes sont démarrées avec '' (espace)
UPD
il est également possible que votre éditeur dispose de l'option: "Supprimer les espaces en fin de ligne" Ainsi, lorsque vous enregistrez un patch dans votre éditeur:
-Line with space at end <--- NOTICE: Here one space at the end
+Line with no space at end<--- Here no space
Votre éditeur supprime l'espace de fin et le correctif devient comme ceci:
-Line with space at end<--- Here no space. Patch will FAIL!!!
+Line with no space at end<--- Here no space also
Ce correctif va échouer car le fichier Origin n'a pas de ligne:
-Line with space at end<---
il a:
-Line with space at end <---
UPD2
Donc si dans votre patch à la ligne suivante
Android:tileMode="repeat"
Votre éditeur supprime l'espace de formation. Patch va échouer
L’interface graphique de Git ne parvient pas à ajouter/supprimer des lignes de l’index lorsque le bloc avec lequel vous travaillez est trop gros (c’est-à-dire que trop de lignes successives ont été modifiées).
Ma solution de contournement: si les modifications ne sont pas un "mur de rose" (s'il y a des lignes non modifiées au milieu du morceau), allez dans edit> options et réduisez le nombre de lignes dans le contexte de diffs. Si cela ne fonctionne pas, vous êtes foutu; utilisez un autre outil (comme la ligne de commande, par exemple).
Je recevais cette erreur lors de la mise en scène des mecs.
Les "espaces" mentionnés ici me rappellent que j'ai, dans mes options de git diff, "-w", qui saute des espaces en différant.
J'ai enlevé ce drapeau (en utilisant "Options ..." de git-gui) et j'ai pu mettre en scène des mecs sans l'erreur. Je l'ai ensuite rajouté (car je ne veux généralement pas voir de différences d'espacement lorsque j'examine ce qui a changé).
Je ne suis pas sûr que cela vous aidera, mais il est plutôt inoffensif d’essayer et facile à annuler.
J'ai eu ce problème parce que j'ai essayé d'ajouter une nouvelle ligne à mon correctif dans emacs et il a automatiquement supprimé la nouvelle ligne à la fin lorsque je l'ai enregistré.
Si vous utilisez emacs pour ajouter une nouvelle ligne à la fin de votre patch, il est également possible de le supprimer à nouveau. J'ai ouvert un autre éditeur de texte pour ajouter ma nouvelle ligne et cela a fonctionné.
Inspiré par la réponse de kyl191, j'ai trouvé une solution simple à ce problème:
ajouter un caractère de nouvelle ligne à la fin de votre fichier
cacher tous les changements
git stash
ajoutez à nouveau un caractère de nouvelle ligne à la fin de votre fichier, de sorte que vous ayez un caractère de nouvelle ligne dans votre fichier actuel ainsi que dans votre version cachée
met en scène le morceau correspondant (contient uniquement votre nouvelle ligne)
git stage <your file>
pop vos changements de stash
git stash pop
Maintenant, vous devriez être capable de mettre en scène des lignes simples via une interface graphique sans cette erreur. Cela fonctionne car après que vous ayez mis en scène uniquement la partie contenant une nouvelle ligne, le fichier diff de la version récupérée de stash voit déjà un fichier qui se termine par un caractère de nouvelle ligne.