Wie mache ich
Git-Status
Unterschiede am Zeilenende ignorieren?
Hintergrundinformation:
Ich benutze zufällig Windows und Linux, um an dem Projekt zu arbeiten. Das Projekt befindet sich in Dropbox.
Ich habe viel darüber herausgefunden, wie Git Diff Zeilenenden ignorieren kann. Da ich meld git diff benutze, öffnet sich meld für jede Datei. Und meld sagt "identische Datei".
Wie vermeide ich das? Git sollte meld nur für geänderte Dateien öffnen. Der Git-Status sollte Dateien nicht als geändert melden, wenn nur das Dateiende unterschiedlich ist.
EDIT: Ursache:
Dies geschah aufgrund dieser Einstellung unter Windows
core.autocrlf true
Also habe ich die Arbeitskopie unter Linux ausgecheckt und core.autocrlf unter Windows auf false gesetzt.
Es wäre immer noch schön zu wissen, wie man den Git-Status dazu bringt, verschiedene neue Zeilen zu ignorieren.
core.autocrlf
die Hauptursache unter Windows ist, aber auch eine Heilung unter Linux. Das Problem ist, dassautocrlf
es unter Windows global ist und das Repo diese Einstellung nicht hat.git/config
. Durch Ausführen eines lokalengit config core.autocrlf true
Elements wurden falsche Änderungen an meiner NTFS-Arbeitskopie entfernt, die unter Windows geklont, aber unter Linux aufgerufen wurde. (Jetzt gibt es nur noch falsche Änderungen mit Symlinks - NTFS-Symlinks funktionieren auf Fuseblk-Mounts, aber Git sieht sie als modifiziert an ...)Antworten:
Versuchen Sie, den Wert für core.autocrlf wie folgt festzulegen:
quelle
core.autocrlf true
ist eine funktionierende Einstellung in CygWin.core.safecrlf false
ist eine funktionierende Einstellung in Git Bash oderVerwenden Sie stattdessen .gitattributes mit der folgenden Einstellung:
.gitattributes befinden sich im selben Verzeichnis wie Ihre globale .gitconfig. Wenn .gitattributes nicht vorhanden ist, fügen Sie es diesem Verzeichnis hinzu. Nach dem Hinzufügen / Ändern von .gitattributes müssen Sie das Repository hart zurücksetzen, um die Änderungen erfolgreich auf vorhandene Dateien anzuwenden.
quelle
git status
. Es ändert tatsächlich, wie Dateien in das Repository eingecheckt werden. ref: git-scm.com/docs/gitattributes#_code_text_codeDiese Antwort scheint relevant zu sein, da das OP auf die Notwendigkeit einer Multi-OS-Lösung hinweist. In diesem Github-Hilfeartikel werden die verfügbaren Ansätze für den betriebssystemübergreifenden Umgang mit Zeilenenden beschrieben. Es gibt globale und Pro-Repo-Ansätze für die Verwaltung von Cross-OS-Zeilenenden.
Globaler Ansatz
Konfigurieren Sie die Behandlung von Git-Zeilenenden unter Linux oder OS X:
Konfigurieren Sie die Behandlung von Git-Zeilenenden unter Windows:
Per-Repo-Ansatz:
Erstellen Sie im Stammverzeichnis Ihres Repos eine
.gitattributes
Datei und definieren Sie zeilenweise Einstellungen für das Zeilenende Ihrer Projektdateien im folgenden Format:path_regex line-ending-settings
Dabeiline-ending-settings
ist eines der folgenden:Der
text
Wert kann weiter konfiguriert werden, um Git anzuweisen, wie Zeilenenden für übereinstimmende Dateien behandelt werden sollen:text
- Ändert die Zeilenenden in native Zeilenenden des Betriebssystems.text eol=crlf
- Konvertiert Zeilenenden inCRLF
an der Kasse.text eol=lf
- Konvertiert Zeilenenden inLF
an der Kasse.text=auto
- Sinnvolle Standardeinstellung, bei der das Zeilenhandling nach Ermessen von Git bleibt.Hier ist der Inhalt einer .gitattributes-Beispieldatei:
Weitere Informationen zum Aktualisieren Ihres Repos nach dem Ändern der Einstellungen für die Zeilenenden finden Sie hier . Tldr:
In einigen Fällen ist dies alles, was getan werden muss. Andere müssen möglicherweise die folgenden zusätzlichen Schritte ausführen:
quelle
Problem im Zusammenhang mit Git-Befehlen unter Windows:
Warnung: LF wird in ... durch CRLF ersetzt.
Die Datei hat ihre ursprünglichen Zeilenenden in Ihrem Arbeitsverzeichnis.
Auflösung :
Es werden keine Warnmeldungen angezeigt.
quelle
Ich habe ein Skript erstellt, um Unterschiede in den Zeilenenden zu ignorieren:
Es werden die Dateien angezeigt, die nicht zur Festschreibungsliste hinzugefügt und geändert wurden (nachdem Unterschiede in den Zeilenenden ignoriert wurden). Sie können das Argument "add" hinzufügen, um diese Dateien zu Ihrem Commit hinzuzufügen.
Quellcode: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Updates :
quelle
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; dazu: meine @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Ich benutze sowohl Windows als auch Linux, aber die Lösung
core.autocrlf true
hat mir nicht geholfen. Ich habe danach sogar nichts geändertgit checkout <filename>
.Also benutze ich Workaround, um zu ersetzen
git status
-gitstatus.sh
Ich vergleiche nur
md5sum
eine Datei und ihren Bruder im Repository.Beispielausgabe:
quelle