215 votes

Conversion des fins de lignes pour l'ensemble de l'arborescence des répertoires (Git)

Situation suivante :

Je travaille sur un Mac fonctionnant sous OS X et j'ai récemment rejoint un projet dont tous les membres utilisent jusqu'à présent Windows. L'une de mes premières tâches consistait à configurer la base de code dans un dépôt Git. J'ai donc récupéré l'arborescence du répertoire par FTP et j'ai essayé de l'enregistrer dans le dépôt Git que j'avais préparé localement. En essayant de le faire, tout ce que j'ai obtenu était ceci

fatal: CRLF would be replaced by LF in blog/license.txt.

Comme cela affecte tous les fichiers situés sous le dossier "blog", je cherche un moyen pratique de convertir TOUS les fichiers de l'arborescence en terminaisons de ligne Unix. Existe-t-il un outil qui fait ça tout de suite ou dois-je écrire un script moi-même ?

Pour référence, ma configuration Git concernant les fins de ligne :

core.safecrlf=true
core.autocrlf=input

5voto

Hashim Points 600

Pour convertir toutes les fins de ligne en fins de ligne UNIX (LF)

dos2unix -v *

Pour convertir toutes les fins de ligne en fins de ligne Windows (CRLF)

unix2dos -v * 

Le site -v / --verbose n'est pas nécessaire mais vous indiquera quels fichiers ont effectivement leurs fins de lignes converties.

Les deux sites dos2unix y unix2dos sont des outils omniprésents et légers qui ont été présents sur pratiquement tous les systèmes de type UNIX que j'ai utilisés (même si, il faut bien l'admettre, ce n'est pas une quantité énorme), et ils ignorent les fichiers non textuels par défaut, ce qui signifie qu'ils peuvent être utilisés en toute sécurité sur des répertoires entiers de cette manière.

4voto

Mustapha-Belkacim Points 904

Voici une solution si vous utilisez sed :

find . -type f -exec sed -i 's/\r$//' {} \;

-i signifie "en place", si vous souhaitez créer une sauvegarde, utilisez la fonction -i.bak

's/\r$//' remplacera tous les retours de chariot( \r ) à la fin de chaque ligne

0 votes

Lorsque vous l'exécutez dans un dépôt git, vous verrez probablement sed: cannot rename ./.git/objects/16/sed68Vezl: Permission denied . Vous devez exclure .git dans ce cas.

1 votes

Attention à ne pas exécuter cette commande sur des fichiers binaires, tels que .mp4 , .jpg o .png Les enfants ne doivent pas s'en préoccuper, car cela les corromprait.

0 votes

Une autre solution naïve et irresponsable, qui ne devrait pas avoir de votes positifs jusqu'à ce qu'il soit clairement établi quels sont les risques liés à sa mise en œuvre.

0voto

Steve Chambers Points 3303

Pour une solution moins geek (mais payante) sous Windows, cet outil semble utile : Convertisseur EOL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X