GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Carriage Returns und Line Feeds werden Sie letztendlich beißen - einige Git-Tipps

Was ist eine Kutsche und warum kehrt sie zurück? Wagenrücklauf Zeilenvorschub WAS BEDEUTET DAS ALLES!?!

Das Papier auf einer Schreibmaschine fährt horizontal auf einem Wagen. Das Carriage Return oder CR war ein nicht druckbares Steuerzeichen, das die Schreibmaschine an den Anfang der Textzeile zurücksetzte.

Ein Carriage Return bewegt den Wagen jedoch zurück, bewegt das Papier jedoch nicht um eine Zeile vor. Der Schlitten bewegt sich auf den X-Achsen...

Und Line Feed oder LF ist das nicht druckbare Steuerzeichen, das die Walze (den Hauptgummizylinder) um eine Zeile dreht.

Daher Carriage Return und Line Feed. Zwei Aktionen und seit Jahren zwei Steuerzeichen.

Jedes Betriebssystem scheint ein EOL (End of Line) anders zu codieren. Ende der 70er verwendeten alle Betriebssysteme CR LF buchstäblich zusammen, weil sie täglich Schnittstellen zu Schreibmaschinen/Druckern hatten.

Windows verwendet CRLF, weil DOS CRLF verwendet hat, weil CP/M CRLF verwendet hat, weil die Geschichte.

Mac OS verwendete CR jahrelang, bis OS X auf LF umstellte.

Unix verwendete nur ein einziges LF über CRLF und hat dies von Anfang an getan, wahrscheinlich weil Systeme wie Multics um 1965 anfingen, nur LF zu verwenden. Das Speichern eines einzelnen Bytes JEDER ZEILE war eine große Sache sowohl für die Speicherung als auch für die Übertragung.

Schneller Vorlauf bis 2018 und vielleicht ist es an der Zeit, dass auch Windows dazu übergeht, nur noch LF als EOL-Zeichen für Textdateien zu verwenden.

Wieso den? Für den Anfang hat Microsoft Notepad endlich aktualisiert, um Textdateien zu verarbeiten, die LF verwenden.

ABER

Wäre eine solche Änderung möglich? Wahrscheinlich nicht, es würde die Welt zerstören. Hier ist NewLine auf .NET Core.

public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

Unabhängig davon, wenn Sie regelmäßig Windows und WSL (Linux auf Windows) und Linux zusammen verwenden, sollten Sie CRLF und LF bewusst und bewusst sein.

Ich bin kürzlich in eine interessante Situation geraten. Sehen wir uns zunächst an, was Git tut

Sie können .gitattributes konfigurieren, um Git mitzuteilen, wie Dateien zu behandeln sind, entweder einzeln oder nach Erweiterung.

Wenn

git config --global core.autocrlf true

gesetzt ist, konvertiert git Dateien automatisch leise, sodass sie auf eine betriebssystemspezifische Weise ausgecheckt werden. Wenn Sie Linux verwenden und zur Kasse gehen, erhalten Sie LF, wenn Sie Windows verwenden, erhalten Sie CRLF.

Viola auf Twitter bietet eine wichtige Klarstellung:

"gitattributes steuert das Zeilenendeverhalten für ein Repo, git config (insbesondere mit --global) ist eine Einstellung pro Benutzer."

99 % der Zeit funktionieren das System und die verfügbaren Optionen hervorragend.

Außer wenn Sie Dateisysteme zwischen Linux und Windows freigeben. Ich verwende Windows 10 und Ubuntu (über WSL) und bewahre Sachen in /mnt/c/github auf.

Wenn ich jedoch von Windows 10 ziehe, erhalte ich CRLF, und wenn ich von Linux ziehe, kann ich LF ausführen, sodass meine Shell-Skripte in Ubuntu MÖGLICHERWEISE FUNKTIONIEREN ODER NICHT.

Ich habe mich entschieden, eine .gitattributes-Datei zu erstellen, die sowohl Shell-Skripts als auch PowerShell-Skripts auf LF setzt. Auf diese Weise können diese Skripte verwendet und zwischen Systemen geteilt und ausgeführt werden.

*.sh eol=lf
*.ps1 eol=lf

Sie haben viele Möglichkeiten. Auch hier ist autocrlf in 99% der Fälle das Richtige.

Aus den GitHub-Dokumenten:

Sie werden feststellen, dass Dateien abgeglichen werden – *.c , *.sln , *.png --, durch ein Leerzeichen getrennt, dann mit einer Einstellung versehen--text , text eol=crlf , binary . Im Folgenden gehen wir auf einige mögliche Einstellungen ein.

  • text=auto
    • Git behandelt die Dateien so, wie es für am besten hält. Dies ist eine gute Standardoption.
  • text eol=crlf
    • Git konvertiert Zeilenenden immer in CRLF an der Kasse. Sie sollten dies für Dateien verwenden, die CRLF behalten müssen Endungen, sogar auf OSX oder Linux.
  • text eol=lf
    • Git konvertiert Zeilenenden immer in LF an der Kasse. Sie sollten dies für Dateien verwenden, die LF-Endungen behalten müssen, auch unter Windows.
  • binary
    • Git wird verstehen, dass die angegebenen Dateien kein Text sind, und es sollte nicht versuchen, sie zu ändern. Die binary Die Einstellung ist auch ein Alias ​​für -text -diff .

Auch hier sind die Standardeinstellungen wahrscheinlich korrekt. ABER - wenn Sie seltsame Sachen machen, Dateien oder Dateisysteme über Betriebssysteme hinweg teilen, dann sollten Sie sich dessen bewusst sein.

Edward Thomson, ein Co-Maintainer von libgit2, hat dies zu sagen und verweist uns auf seinen Blogbeitrag zu Line Endings.

Ich würde das stärker sagen. Da `core.autocrlf` in einem Bereich konfiguriert wird, der pro Benutzer gilt, aber die Art und Weise beeinflusst, wie das gesamte Repository funktioniert, sollte `.gitattributes` _immer_ verwendet werden.

Wenn Sie Probleme haben, liegt es wahrscheinlich am Zeilenende. Edwards Empfehlung ist, dass ALLE Projekte ein .gitattributes.

einchecken

Der Schlüssel zum Umgang mit Zeilenenden besteht darin, sicherzustellen, dass Ihre Konfiguration mit .gitattributes an das Repository übergeben wird . Für die meisten Leute ist dies so einfach wie das Erstellen einer Datei mit dem Namen .gitattributes im Stammverzeichnis Ihres Repositorys, das eine Zeile enthält:
* text=auto

Hoffe, das hilft!

* Schreibmaschine von Matunos verwendet unter Creative Commons

Sponsor: Sehen Sie sich JetBrains Rider an:eine plattformübergreifende .NET-IDE. Bearbeiten, Refactoring, Testen und Debuggen von ASP.NET-, .NET Framework-, .NET Core-, Xamarin- oder Unity-Anwendungen. Erfahren Sie mehr und laden Sie eine 30-Tage-Testversion herunter!


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. 10 interessante Linux-Kommandozeilen-Tricks und wissenswerte Tipps

  3. Bash-Zeilenfortsetzungen nach &&und || Dokumentiert?

  4. $bashpid und $$ unterscheiden sich in manchen Fällen?

  5. Linux .htaccess Tipps und Tricks

Tipps und Tricks zur Linux-Befehlszeilennavigation - Teil 1

Einige Alternativen zum „obersten“ Befehlszeilendienstprogramm, die Sie vielleicht kennen möchten

19 Nützliche Tipps und Tricks für die Linux-Befehlszeile

Tipps und Tricks zur Netstat-Befehlszeile

10 fantastische PuTTY-Tipps und Tricks, die Sie wahrscheinlich nicht kannten

Coole Tipps und Tricks zu WSL (Windows Subsystem for Linux), von denen Sie (oder ich) nicht wussten, dass sie möglich sind