web-dev-qa-db-fra.com

Comment forcer git à extraire la branche principale et à supprimer les retours chariots après avoir normalisé les fichiers à l'aide de l'attribut "text"?

Bon, alors j'ai ajouté le fichier .gitattributes avec des lignes comme celle-ci

*.css text
*.js text
etc...

J'ai ensuite suivi les instructions de la page http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

Mais maintenant, ma copie de travail a toujours le retour chariot! J'ai des fichiers non suivis que j'aimerais conserver. Comment puis-je avoir à nouveau git checkout la branche master avec les fichiers normalisés?

Je sais que les fichiers sont normalisés dans le référentiel, car lorsque je clone le référentiel, je dispose de tous les fichiers sans les retours chariot.

88
Jason

Ah ah! Extraire la validation précédente, puis extraire le maître.

git checkout HEAD^
git checkout -f master
232
Jason

Comme d'autres l'ont fait remarquer, on pourrait simplement supprimer tous les fichiers du référentiel, puis les extraire. Je préfère cette méthode et cela peut être fait avec le code ci-dessous

git ls-files -z | xargs -0 rm
git checkout -- .

ou une ligne

git ls-files -z | xargs -0 rm ; git checkout -- .

Je l'utilise tout le temps et je n'ai encore trouvé aucun inconvénient!

Pour plus d'explications, le -z ajoute un caractère nul à la fin de chaque entrée entrée par ls-files, et le -0 indique à xargs de délimiter le résultat reçu par ces caractères nuls.

13
mechsin