Pourquoi' Updating the Git index failed ' s'affiche

j'utilise Windows. Lors de la mise en scène des fichiers, Je reçois cette erreur.

Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.

suivi d'une liste de fichiers qui ont été convertis de LF en CRLF

après beaucoup de lectures sur le problème CRLF / LF avec Git utilisation cross platform, je comprends plus ou moins ce qui se passe, et j'essaie de déterminer quel réglage autocrlf est le meilleur pour moi, mais je ne comprends pas pourquoi Git dit que la mise à jour de l'index a échoué. Mon comprendre, c'est qu'il a converti les fichiers EOF alors quel est le problème avec cela et pourquoi il me dit que la mise à jour de l'index a échoué. Ai-je besoin de corriger quelque chose ( autre que de choisir un réglage autocrlf approprié) ou Puis-je procéder

j'ai alors deux options Continuer et débloquer L'Index, ce que cela signifie Et ce qui est la meilleure ligne de conduite.

43
demandé sur byronyasgur 2012-05-13 21:40:11

3 réponses

git config --global core.autocrlf false

A toujours été ma recommandation (voir " Git 1.6.4 beta sur Windows (msysgit) - Unix ou DOS de terminaison de ligne ").

cependant, dans votre cas, vous pouvez "continuer", mais cet avertissement est là pour mentionner la conversion de certains fichiers pourrait ne pas être réversible:

core.safecrlf

si elle est vraie, fait git vérifier si la conversion CRLF est réversible lorsque la conversion de fin de ligne est active. Git vérifiera si une commande modifie directement ou indirectement un fichier dans l'arbre de travail. Par exemple, la saisie d'un fichier suivi de la vérification du même fichier devrait produire le fichier original dans l'arbre de travail. Si ce n'est pas le cas pour le réglage actuel de core.autocrlf , git va rejeter le fichier.

La variable peut être définie comme "warn", auquel cas git ne préviendra qu'en cas de conversion irréversible, mais poursuivra l'opération.

si vous ne voulez pas voir cet avertissement, comme expliqué dans ce fil , vous pouvez définir core.safecrlf à false .

vous pouvez également cacher vos fichiers à travers le menu Outils de git gui, et ajouter quelques options à ces outils avec, par exemple, ce fichier de configuration git .

L'intérêt est que, pour chaque outil, vous pouvez ajouter:

guitool.<name>.norescan

Ne modifiez pas le répertoire de travail après l'exécution de l'outil.


pourriez-vous s'il vous plaît élaborer un peu sur L'Index de déverrouillage

vous pouvez voir ce message dans le index.tcl Git-gui script : il supprime l'index.le fichier de verrouillage créé par git-gui lors de la manipulation de l'index.

Vous pouvez voir plus à la "fichier de verrouillage de l'API" page de documentation :

exclusion mutuelle .

Lorsque nous écrivons un nouveau fichier d'index, nous créons d'abord un nouveau fichier $GIT_DIR/index.lock , y écrivons les nouveaux contenus et le renommons vers la destination finale $GIT_DIR/index .

Nous essayons de créer le fichier $GIT_DIR/index.lock avec O_EXCL pour que nous puissions remarquer et échouer quand quelqu'un d'autre est déjà essayez de mettre à jour le fichier d'index.

44
répondu VonC 2017-05-23 12:02:11

j'ai également couru dans ce même tho mon core.autocrlf réglage est déjà false et core.safecrlf est débranché. Je soupçonne que le coupable est la configuration diff.astextplain.textconv .

quand j'ai lancé git config --list , la ligne suivante a été affichée dans la sortie:

diff.astextplain.textconv=astextplain

Je ne pense pas que ce paramètre est en fait lié à l'avertissement/erreur, mais il m'a inspiré à regarder dans la conversion de texte qui pourrait être fait. Après un petit spelunking en ligne et dans mon repo, j'ai découvert la ligne suivante dans mon repo .gitattributes fichier:

* text=auto

[j'ai probablement eu le .gitattributes fichier de GitHub.]

étant donné que seule la ligne ci-dessus n'a pas été commentée dans celle-ci, et de plus que le traitement des conversions 'automagic' de fin de ligne a toujours été un casse-tête, j'ai choisi de supprimer ce fichier de ma pension. Après l'avoir fait, la mise en scène des mêmes fichiers ne m'a plus incité avec l'avertissement/erreur" mise à jour de l'index Git échouée".

1
répondu Kenny Evitt 2016-09-26 15:54:20

TL;DR: cet avertissement signifie que git pourrait vous retourner un fichier texte dans le style Windows malgré que vous ayez vérifié dans un fichier texte dans le style UNIX.

UNIX et Windows diffèrent dans la façon dont ils sauvent les sauts de ligne dans les fichiers texte. Wikipedia a une liste des sauts de ligne sur différents OSS

l'avertissement que vous recevez est reproductible si vous faites ce qui suit sur Windows:

  • créer un dépôt git dans un répertoire vide
  • Créer un commit représentant l'initiale, vides de l'état de l'opération:

    git commit --allow-empty -m "initial commit"
    
  • utilisez git config core.autocrlf et git config core.safecrlf pour vérifier que autocrlf est défini à true et safecrlf est débranché (pas de sortie). Si ce n'est pas le cas, utilisez les commandes suivantes pour définir

    git config core.autocrlf true
    git config --unset core.safecrlf
    
  • utilisez Notepad++ pour écrire un fichier texte appelé text.txt au format UNIX. Ecrire un fichier qui a au moins une coupure de ligne. C'est ainsi que vous sélectionnez les fins de ligne UNIX: Notepad++ with the menu Edit - EOL Conversion opened

  • git add text.txt . Vous obtenez le message d'avertissement

    avertissement: LF sera remplacé par CRLF dans le texte.txt.

    Fichier aura ses fins de ligne originales dans votre répertoire de travail.

  • Commettre le fichier texte: "git commit -m "ajout de fichiers UNIX terminaisons"

  • voyez maintenant à quoi ressemble le fichier si vous le vérifiez à partir de l'arbre. Tout d'abord, vérifiez la version avant de créer le fichier (go 1 commit back). Le fichier text.txt disparaît du répertoire de travail:

    git checkout ~1
    
  • maintenant, restaurer la version après que vous ayez créé le fichier

    git checkout master
    

le fichier text.txt est restauré. Mais ouvrez-le dans Notepad++ et vérifiez le format de fin de ligne dans la ligne d'état du bas de Notepad++:

The restored file which has now Windows-style CRLF endings

le fichier que vous avez vérifié a des fins de ligne de style Windows, mais le fichier que vous avez choisi avait des fins de fichier de style UNIX! C'est ce que le message d'avertissement est au sujet de: les cadres core.autocrlf=true avec core.safecrlf=<unset> signifient que les fichiers que vous obtenez restauré de l'arbre peut être différent des fichiers que vous avez cochés dans, Parce qu'ils peuvent avoir des fins de fichier différentes.

0
répondu akraf 2018-09-25 09:22:08