Question

J'ai un dépôt Git qui a des fichiers avec le format DOS (terminaisons de ligne de \r\n). Je voudrais simplement exécuter les fichiers par dos2unix (qui changeraient tous les fichiers au format UNIX, avec des fins de ligne \n), mais à quel point cela affecterait l'histoire, et il est recommandé à tous?

Je suppose que la norme est de toujours utiliser les fins de ligne UNIX pour les fichiers contrôlés par la source, et éventuellement passer à des fins de ligne spécifiques OS localement?

Était-ce utile?

La solution

L'approche que vous devrez utiliser dépend de la façon dont votre dépôt public est.

Si vous ne me dérange pas ou se soucient de changer tous SHAs parce que vous êtes plus ou moins le seul à l'utiliser mais que vous voulez que cette question soit réglé pour tous les temps, vous pouvez exécuter un git filter-branch et appliquer dos2unix à tous les fichiers à chaque validation. (Si vous partagez le dépôt, tout le monde a besoin d'autre chose plus ou moins de renouveler complètement, c'est donc potentiellement dangereux.)

Donc, la meilleure option et aussi un moyen plus facile serait de changer que dans les têtes actuelles. Cela signifie que votre passé commet ont encore fins \r\n mais à moins que vous faites beaucoup picorage du passé, ce ne devrait pas être un problème. Les outils de diff pourraient se plaindre un peu plus souvent, bien sûr, mais normalement vous ne diff commits à proximité, donc cette question se résout les commits accumulent.

Et les fins de ligne UNIX sont standard, vous avez raison à ce sujet. Meilleure approche est de configurer votre éditeur pour écrire que ces fins même sur les fenêtres. Dans le cas contraire, il y a aussi un cadre de autocrlf que vous pouvez utiliser.


Ajout à la partie réécriture de l'histoire:

La dernière fois que je ne le même, j'ai utilisé la commande suivante pour modifier tous les fichiers de fins unix.

#!/bin/bash
all2dos() { find * -exec dos2unix {} \; }
export -f all2dos
git filter-branch -f --tree-filter 'all2dos' --tag-name-filter cat --prune-empty -- --all

Autres conseils

Cette chose crlf nous rendait fou quand nous avons converti de svn git (dans un centre (nu) comme) environnement scm. Ce qui finalement nous a été nous avons copié le fichier .gitconfig global à la racine de l'utilisateur de tout le monde (yep Windows et Linux) avec celui initial provenant d'un système Windows et ayant core.autocrlf = true et core.safecrlf = false qui a fait des ravages les utilisateurs de linux (comme les scripts bash ne fonctionnait pas et tous les affreux ^ M de). Nous avons donc d'abord un script de commande et clone qui a fait un dos2unix après ces commandes. Ensuite, je suis tombé sur les articles config core.autocrlf et core.safecrlf et les Définie en fonction de l'O / S:

Fenêtres: core.autocrlf = true et core.safecrlf = false Linux: core.autocrlf = entrée et core.safecrlf = false

Ils ont été définis avec: --- sous Windows ---

git config --global core.autocrlf true
git config --global core.safecrlf false

--- sous Linux ---

git config --global core.autocrlf input
git config --global core.safecrlf false

Alors pour nos développeurs Linux nous installons un petit script bash / usr / local / bin / gitfixcrlf:

#!/bin/sh
# remove local tree
git ls-files -z | xargs -0 rm
# checkout with proper crlf
git checkout .

Ce qui ils ne devaient courir sur leurs clones de sandbox local une fois. Tout clonage futur a été fait correctement. Toute future poussée tire maintenant ont été traitées correctement. Ainsi, cette résolu nos multiples problèmes O / S avec linefeeds. Aussi Notez que Mac tombe dans la même configuration que Linux.

Pour la solution continue, un coup d'oeil à la core.autocrlf (et core.safecrlf) les paramètres de configuration .

Faire cette fois dans votre dépôt entier suffit de créer un commettras qui est assez impossible de fusionner avec (puisque chaque ligne dans ces fichiers seront modifiés), mais une fois que vous avez passé, il devrait être pas grand-chose. (Oui, vous pouvez utiliser git filter-branch pour faire la modification tout au long de l'histoire, mais c'est un peu effrayant.)

Si votre liste des fichiers contrôlés version inclut les fichiers binaires, ou vous ne pouvez pas changer l'histoire facilement ... voici un dandy à portée de main en une ligne:

https://unix.stackexchange.com/a/365679/112190

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top