Ich möchte git zwingen, Dateien unter Windows mit einfach LF
nicht auszuchecken CR+LF
. Ich habe die beiden Konfigurationsoptionen überprüft, konnte jedoch nicht die richtige Kombination von Einstellungen finden.
Ich möchte, dass alle Dateien konvertiert werden LF
und LF
die Dateien beibehalten werden.
Anmerkung: Ich habe verwendet, autocrlf = input
aber dies repariert nur die Dateien, wenn Sie sie festschreiben. Ich möchte es erzwingen, damit sie es benutzen LF
.
Wahrscheinlich war mir nicht so klar: Das Repository verwendet bereits, LF
aber die mit msysgit ausgecheckten Dateien werden verwendet, CR+LF
und ich möchte msysgit dazu zwingen, sie zu erhalten LF
: Erzwingen von Unix-Zeilenenden .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
ist die richtige Option. Natürlich schützt es Sie nicht vor Dateien, die sich wirklichcr+lf
im Repository befinden oder mit denen Sie Dateiencr+lf
in einem anderen Tool erstellen , bevor Sie sie zu git hinzufügen. Welche Probleme haben Sie, bei denen dies nicht funktioniert?LF
aber wenn ich sie unter Windows bekomme, konvertiert msysgit sie inCR+LF
.autocrlf
set toinput
lässt gitlf
Linefeeds in Ruhe. Können Sie die Ausgabe von postengit config
?Antworten:
Das OP fügte in seiner Frage hinzu:
Ein erster einfacher Schritt wäre immer noch in einer
.gitattributes
Datei:(wie in den Kommentaren von Enkelkindern erwähnt , die sich auf die
.gitattributes
Konvertierung am Zeilenende beziehen ), um jeglicheCRLF
Konvertierung für Dateien mit korrekter Qualität zu vermeideneol
.Und ich habe immer empfohlen
git config --global core.autocrlf false
, jede Konvertierung zu deaktivieren (die für alle versionierten Dateien gelten würde ).Siehe Best Practices für die plattformübergreifende Git-Konfiguration?
Seit Git 2.16 (Q1 2018) können Sie
git add --renormalize .
diese.gitattributes
Einstellungen sofort anwenden .Ein zweiter, leistungsfähigerer Schritt umfasst einen Gitattribute-Filtertreiber und das Hinzufügen eines Verschmutzungsschritts
Wann immer Sie Ihren Arbeitsbaum aktualisieren, kann ein Skript nur für die Dateien, die Sie in angegeben haben
.gitattributes
, dieLF eol
und jede andere Formatierungsoption erzwingen, die Sie erzwingen möchten.Wenn das
clear
Skript " " nichts bewirkt, haben Sie (nach dem Festschreiben) Ihre Dateien transformiert und genau das Format angewendet, dem Sie folgen müssen.quelle
.txt
Erweiterung. Es ist vorzuziehen, dies zuerst festzulegen und an einer bestimmten Gruppe zu testen, bevor Sie auf * verallgemeinern, und eine negative Regel hinzuzufügen!*.xyz ...
, um einige wenige Dateien von dieser Regel auszuschließen..gitattributes
Zeilen lauten:*.txt text eol=lf
gemäß git-scm.com/docs/gitattributes.gitattributes
haben, müssen wir tungit add --renormalize .
Der richtige Weg , LF Endungen in Windows zu erhalten , ist zum ersten Satz
core.autocrlf
anfalse
:Sie müssen dies tun, wenn Sie msysgit verwenden, da es
true
in den Systemeinstellungen festgelegt ist.Jetzt führt git keine Normalisierung am Zeilenende durch. Wenn Sie möchten, dass Dateien, die Sie einchecken, normalisiert werden, gehen Sie folgendermaßen vor: Legen
text=auto
Sie.gitattributes
für alle Dateien Folgendes fest:Und setzen Sie
core.eol
auflf
:Jetzt können Sie auch einzelne Repos durch Ausführen auf crlf (im Arbeitsverzeichnis!) Umschalten
Nachdem Sie die Konfiguration vorgenommen haben, möchten Sie möglicherweise, dass git alle Dateien im Repo normalisiert . Gehen Sie dazu zum Stammverzeichnis Ihres Repos und führen Sie die folgenden Befehle aus:
Wenn Sie jetzt möchten, dass git auch die Dateien in Ihrem Arbeitsverzeichnis normalisiert , führen Sie die folgenden Befehle aus:
quelle
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Ich komme ziemlich oft auf diese Antwort zurück, obwohl keine davon für mich ganz richtig ist. Die richtige Antwort für mich ist jedoch eine Mischung aus den anderen.
Was ich finde, funktioniert wie folgt:
Bei Repos, die nach dem Festlegen dieser globalen Einstellungen ausgecheckt wurden, wird alles wie im Repo ausgecheckt - hoffentlich
LF
(\n
). AlleCRLF
werden nurLF
beim Einchecken konvertiert.Mit einem vorhandenen Repo, das Sie bereits ausgecheckt haben - das die richtigen Zeilenenden im Repo hat, aber nicht Ihre Arbeitskopie - können Sie die folgenden Befehle ausführen, um das Problem zu beheben:
Dadurch werden (
rm
) rekursiv (r
) ohne Eingabeaufforderung (-f
) alle Dateien außer den von Ihnen bearbeiteten (--cached
) aus dem aktuellen Verzeichnis (.
) gelöscht . Dasreset
bringt dann alle diese Dateien in einen Zustand zurück, in dem sie ihre wahren Zeilenenden haben (passend zu dem, was im Repo steht).Wenn Sie die Zeilenenden von Dateien in einem Repo korrigieren müssen, empfehle ich, einen Editor zu verwenden, mit dem Sie dies in großen Mengen wie IntelliJ oder Sublime Text tun können, aber ich bin sicher, dass jeder gute dies wahrscheinlich unterstützen wird.
quelle
Notepad++
zeigt auch das Zeilenende der aktuell geöffneten Datei in der unteren rechten Ecke. Durch Klicken mit der rechten Maustaste auf dieses Feld können Sie die Zeilenenden ändern.core.autocrlf input
Option überschreibt diecore.eol
Einstellung, sodass die Einstellung beider redundant ist. (Siehe git-scm.com/docs/git-config )Kontext
Wenn du
Sie können dies ab Git 2.10 tun. 2.10 oder höher ist erforderlich, da 2.10 das Verhalten von text = auto zusammen mit eol = lf korrigiert hat . Quelle .
Lösung
Legen Sie eine
.gitattributes
Datei mit folgenden Inhalten im Stammverzeichnis Ihres Git-Repositorys ab:Verpflichte es.
Optionale Optimierungen
Sie können auch ein
.editorconfig
Stammverzeichnis im Repository Ihres Repositorys hinzufügen, um sicherzustellen, dass moderne Tools neue Dateien mit den gewünschten Zeilenenden erstellen.quelle
core.autocrlf=input
ist die richtige Einstellung für das, was Sie wollen, aber Sie müssen möglicherweise eingit update-index --refresh
und / oder ein tungit reset --hard
ausführen, damit die Änderung wirksam wird.Mit der
core.autocrlf
Einstellung aufinput
wendet git beim Auschecken keine Zeilenumbruchkonvertierung an (wenn Sie also LF im Repo haben, erhalten Sie LF), stellt jedoch sicher, dass Sie einige CRLFs in die Arbeit einführen, falls Sie dies vermasseln irgendwie kopieren, sie werden nicht in das Repo kommen.quelle
Die Lösung für dieses Problem finden Sie unter: https://help.github.com/de/github/using-git/configuring-git-to-handle-line-endings
Vereinfachte Beschreibung, wie Sie dieses Problem unter Windows lösen können:
Globale Einstellungen für Zeilenenden Mit dem Befehl git config core.autocrlf wird geändert, wie Git mit Zeilenenden umgeht. Es braucht ein einziges Argument.
Unter Windows übergeben Sie einfach true an die Konfiguration. Zum Beispiel: C:> git config --global core.autocrlf true
Viel Glück, ich hoffe ich habe geholfen.
quelle