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.
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
avecO_EXCL
pour que nous puissions remarquer et échouer quand quelqu'un d'autre est déjà essayez de mettre à jour le fichier d'index.
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".
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
etgit config core.safecrlf
pour vérifier queautocrlf
est défini àtrue
etsafecrlf
est débranché (pas de sortie). Si ce n'est pas le cas, utilisez les commandes suivantes pour définirgit 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: -
git add text.txt
. Vous obtenez le message d'avertissementavertissement: 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++:
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.