Suppression des retours à la ligne (^ M) de certaines lignes sans modifier chaque ligne

2

J'ai des fichiers C ++ assez longs et git diff --checkindique qu'il existe quelques retours à la ligne ^Msur environ 15 lignes différentes. Ceci est sur un ordinateur Windows 7. Après avoir recherché plusieurs solutions, à savoir les Advanced Save Optionsconversions EOL de Visual Studio ou de Notepad ++, elles semblent toutes modifier chaque ligne, pas seulement celles dont Git se plaint. Cela se traduit par un git diff de chaque ligne remplacée.

Cela est-il dû au fait que toutes les modifications précédentes apportées à ces fichiers ont également des retours à la ligne ^Met que les validations précédentes y ont ignoré les avertissements?

L'exécution en cours git config core.autocrlfrenvoie true, mais la création d'un fichier ne fait rien lorsque je l'exécute git diff --cached --checkaprès l'avoir stocké.

Est-il possible de les supprimer? Aller à la ligne et essayer de changer manuellement ne semble pas aider.

Fasih Awan
la source

Réponses:

1

15 lignes?

Dans le bloc-notes ++, choisissez remplacer. Choisi étendu. Recherchez \ r (qui est ^ M) et remplacez-le par rien (sauf si vous voulez une nouvelle ligne, remplacez-le par \ n). Puisque vous ne voulez pas que tous les ^ M soient remplacés, n'appuyez pas sur remplacer tout, choisissez ceux que vous souhaitez remplacer.

Si vous utilisez le bloc-notes Windows classique, les ^ M apparaissent sous forme de cases. Vous pouvez supprimer les boîtes. Moche, mais ça marche.

Robert Jacobs
la source
1

Utilisez dos2unix <file>si sur la ligne de commande. Cela corrigera les fins de ligne nécessaires ou ne fera rien si rien n'est nécessaire. Faire un find . -name "*.cpp" -exec dos2unix {} +pour faire plusieurs fichiers. Puis comparez avec git diffavant commit.

Il est préférable d'éviter de se retrouver avec des fins de lignes mixtes dans les fichiers. Cela peut rendre la fusion et le suivi de l’histoire maladroits.

Certains éditeurs ne changeront pas de style, mais je pense que si un seul ^ M est inséré dans un fichier, certains éditeurs assumeront le même style et modifieront toutes les fins de ligne lorsqu’ils écrivent un fichier.

Il est généralement possible de trouver des paramètres pour les éditeurs qui obligeront l'éditeur à coller avec le style souhaité. Les paramètres de fin de ligne et de tabulation sont généralement définis en fonction du style.

Gaoithe
la source
1

Git peut le faire automatiquement avec git config --global core.autocrlf true. Mais il le fait à l'heure de la caisse ou à l'heure des commandes. Donc, git ne montrera pas les changements mis en scène, mais devrait tranquillement s'occuper de la conversion SI votre éditeur introduit de nouvelles fins de lignes indésirables.

Je pense utiliser dos2unix si les fins de ligne indésirables sont déjà dans le référentiel.

Pour plus de détails, voir la réponse ici: https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settings et lisez http://git-scm.com/book/fr/Customizing-Git -Git-Configuration # Formatage-et-espaces

Gaoithe
la source
0

sur une machine Windows, vous pouvez faire par exemple:

for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f

cela supprimera les CR de tous les fichiers avec l'extension .js du répertoire en cours

Kofifus
la source