Ich denke, es hat vielleicht mit textmate zu tun, aber wir arbeiten in einem kleinen Team und haben einige Probleme mit vollständigen Dateikonflikten nahezu identischer Dateien in git, da an jede Zeile eines Zweigs ein ^ M angehängt ist.
Was soll dieser mysteriöse ^M
Charakter tun und woher könnte er kommen?
Unsere Entwickler verwenden Emacs unter Windows / Mac, TextMate unter Mac, Coda unter Mac und gelegentlich den Texteditor wp-admin.
Hat jemand jemals dieses Problem, das von einem dieser Probleme herrührt?
Antworten:
In git-config gesetzt ,
core.autocrlf
umtrue
automatisch zu machen git Zeilenenden korrekt für Ihre Plattform umwandeln, zum Beispiel diesen Befehl für eine globale Einstellung:quelle
Jemand konvertiert seine Zeilenendezeichen nicht richtig .
Ich nehme an, es sind die Windows-Leute, die ihre CRLF lieben. Unix liebt LF und Mac liebte CR, bis es auf Unix-Weise gezeigt wurde.
quelle
^M
ist0x0d
, dh das Wagenrücklaufzeichen. Wenn Ihr Display so aussiehtDann muss die Datei von Windows stammen, da die Standard-Newline-Sequenz unter Windows
CR
LF
(0x0d 0x0a
) ist, während die Standard-Newline-Sequenz ausschließlich ausLF
Unices besteht.Wenn die Datei von einem Mac OS 9-System oder einem früheren System stammt, wird dies als angezeigt
weil es nach den Wagenrückläufen keine Zeilenvorschübe geben würde.
quelle
Geben Sie Folgendes ein, damit ^ M in git verschwindet:
Credits: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/
quelle
git diff
beim Vergleichen von Dateien berücksichtigt. Entfernen Sie diese Einstellung mitgit config --global --unset core.whitespace
(aus diesem Thread ).--global
um nur das aktuelle Repo zu konfigurieren.Sie haben mit dem Unterschied zwischen Zeilenenden im DOS-Stil und Unix-Stil zu tun. Lesen Sie den Wikipedia-Artikel . Möglicherweise finden Sie ein dos2unix-Tool, das Ihnen hilft, oder schreiben einfach ein kleines Skript, um sie selbst zu beheben.
Bearbeiten : Ich habe hier den folgenden Python-Beispielcode gefunden :
quelle
Ich verwende Android Studio (JetBrains IntelliJ IDEA ) unter Mac OS und mein Problem war, dass ^ M in einigen Dateien in meiner Pull-Anfrage auf GitHub angezeigt wurde . Was für mich funktionierte, war das Ändern des Zeilentrennzeichens für eine Datei.
Öffnen Sie die gewünschte Datei im Editor, gehen Sie zu Datei, gehen Sie zu Zeilentrennzeichen und wählen Sie die beste Option für Sie (für mich war es LF - Unix und OS X (\ n) ).
Laut dem nächsten Artikel ist dieses Problem auf verwirrte Zeilenenden zwischen Betriebssystemen zurückzuführen: http://jonathonstaff.com/blog/issues-with-line-endings/
Weitere Informationen finden Sie hier: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48
quelle
Anstelle von Query-Replace können Sie auch Mx delete-trailing-whitespace verwenden
quelle
Pot das folgende in Ihrem
~/.emacs
(oder äquiuvalent)und dann könnten Sie einfach verwenden
M-x dos2unix
.quelle
^M
Am Ende der Zeile in Emacs wird ein Wagenrücklauf (\ r) gefolgt von einem Zeilenvorschub (\ n) angezeigt. Dies wird häufig angezeigt, wenn eine Person Dateien unter Windows bearbeitet (wobei das Zeilenende die Kombination aus Wagenrücklauf und Zeilenumbruchzeichen ist) und Sie unter Unix oder Linux bearbeiten (wobei das Zeilenende nur ein Zeilenumbruchzeichen ist).Die Kombination von Zeichen ist normalerweise nicht schädlich. Wenn Sie die Quellcodeverwaltung verwenden, können Sie möglicherweise das Eincheckformat für Textdateien so konfigurieren, dass die Zeilen auf magische Weise für Sie angepasst werden. Alternativ können Sie möglicherweise Check-In- und Check-Out-Trigger verwenden, die die Dateien automatisch für Sie "reparieren". Oder Sie können einfach ein Tool wie dos2unix verwenden , um Dinge manuell anzupassen.
quelle
Wie jeder schon erwähnt hat. Es ist ein anderer Zeilenendstil. MacOSX verwendet Unix-Zeilenenden, dh LF (Zeilenvorschub).
Windows verwendet sowohl CR (Wagenrücklauf) als auch LF (Zeilenvorschub) als Zeilenende. Da Sie sowohl Windows als auch Mac verwenden, liegt das Problem daran.
Wenn Sie eine Datei in Windows erstellen und dann auf den Mac bringen, werden diese ^ M-Zeichen möglicherweise am Ende der Zeilen angezeigt.
Wenn Sie sie entfernen möchten, können Sie dies sehr einfach in Emacs tun. Markieren und kopieren Sie einfach das Zeichen ^ M und ersetzen Sie ^ M durch, und Sie sind fertig.
BEARBEITEN: Einige andere Links, die hilfreich sein können. http://xahlee.org/emacs/emacs_adv_tips.html
Mit diesem können Sie Emacs so konfigurieren, dass ein bestimmter Typ eines Zeilenendstils verwendet wird. http://www.emacswiki.org/emacs/EndOfLineTips
quelle
Ich bin vor einiger Zeit auf dieses Problem gestoßen. Das ^ M steht für einen Wagenrücklauf. Wenn Sie auf
Ctrl-Q Ctrl-M
(Dies erzeugt ein wörtliches ^ M) suchen , können Sie dieses Zeichen in Emacs in den Griff bekommen. Ich habe etwas in diese Richtung getan:quelle
Wenn auf Ihrem System kein Dienstprogramm dos2unix installiert ist, können Sie ein eigenes Dienstprogramm erstellen, um Windows-Endzeilenzeichen zu entfernen:
mit folgendem Inhalt
Fügen Sie in Ihrem ~ / .bashrc die folgende Zeile hinzu:
Bewirbt sich
entfernt ^ M Zeichen an Zeilen, die in file_from_PC.txt enden. Sie können überprüfen, ob Sie diese haben oder nicht, indem Sie cat verwenden:
quelle
Siehe auch:
^ M in Emacs verstecken
Seien Sie vorsichtig, wenn Sie die ^ M-Zeichen entfernen und erneut an Ihr Team senden möchten. Möglicherweise sehen sie danach eine Datei ohne Wagenrücklauf.
quelle
Die Lösung für mich bestand darin, die folgende Elisp-Funktion zu verwenden, die in diesem Emacs-Wiki-Artikel enthalten ist .
Führen Sie die Funktion
M-x dos2unix
im Puffer aus und speichern Sie die Datei. Alle^M
verschwinden.quelle