Frage Deaktivieren Sie Git EOL Conversions


Ich versuche, git dazu zu bringen, keine Zeilenenden für irgendeine Operation zu ändern. Leider scheint es so egal zu sein. Ich habe es auf den folgenden Testfall reduziert, der so viele verschiedene Mechanismen zur Deaktivierung dieses Verhaltens aufweist, wie ich finden konnte.


  • Beginnen Sie mit zwei Rechnern (Windows Computer = A, Linux Computer = B)
  • Auf beiden Maschinen: git config --global core.autocrlf false
  • Auf beiden Maschinen: git config --global core.eol crlf (nur für den Fall)

  • Erstellen Sie ein neues Repository für A. Aus einem leeren Ordner:
    • git init --shared (dann blende das Erschaffene aus .git Verzeichnis)
    • Erstelle eine neue Datei .gitignore im Repository
    • Erstelle eine neue Datei .gitattributes im Repository mit der einzelnen Zeile: * -text
    • git add ., dann git commit -m "initial commit" um zu arbeiten, z.B. Dies.
    • git branch master_recv
    • Fügen Sie Fernbedienungen hinzu
  • Erstelle eine neue Datei document.txt in dem Repository, das CRLF enthält
  • Verpflichten: git add -A, dann git commit -m "<something>"
  • Beachten Sie, dass A ist document.txt enthält immer noch CRLF (und Löschen und Zurücksetzen mit --hard gibt die Version noch mit CRLF zurück)

  • SCP das gesamte Verzeichnis zu Computer B
  • Fügen Sie eine neue Datei hinzu new file CRLF enthält
  • Verpflichten: git add -A, dann git commit -m "<something>"
  • Beachte das B's document.txt und B's new file beide enthalten noch CRLF

  • Ziehe B's Master zu A: git pull <remote> master:master_recv
  • Wie document.txt hat sich zu LF geändert. Die hinzugefügte Datei new file enthält auch LF.

Das Problem tritt nicht auf, wenn B ein Windows-Computer ist.


35
2018-02-17 06:58


Ursprung


Antworten:


In Ihrem Projekt sollte eine .gitattributes-Datei vorhanden sein. Die meiste Zeit sollte es so aussehen: enter image description here

Ändern Sie * text = auto in * text = false.

So was:

enter image description here

Wenn Ihr Projekt keine .gitattributes-Datei enthält, werden die Zeilenenden durch Ihre Git-Konfigurationen festgelegt. Um deine git-Konfigurationen zu ändern, mach folgendes:

Gehe zur Konfigurationsdatei in diesem Verzeichnis:

1) C: \ Programmdaten \ Git \ config

2) Öffnen Sie die Konfigurationsdatei in Notepad ++ (oder den von Ihnen bevorzugten Texteditor)

3) Ändern Sie "autocrlf =" in false.

enter image description here


33
2017-09-13 02:19



Eine einfache Lösung ist:

  • Stellen Sie sicher, dass core.autocrlf für false gesetzt ist alle Repos:
    git config --global core.autocrlf false
  • Re-Klonen Sie Ihr Repo und überprüfen Sie, dass keine EOL-Konvertierung durchgeführt wurde.

Wenn automatisch Konvertierungen vorgenommen werden, bedeutet das a .gitattributes  core.eol Richtlinie ist da im Repo.


18
2018-02-17 07:09



Ich habe es herausgefunden. Es scheint, dass das SCP-Programm die Zeilenendungen konvertiert hat. Ich bemerkte dies, als ich absichtlich versuchte, eine Datei mit LF-Endungen zu erstellen und dann zu beobachten, dass sie beim Herunterladen als CRLF erschien.

Da dies die Lösung für mich war, akzeptiere ich diese Antwort, aber die Menschen der Zukunft sollten sich auch auf die anderen Antworten für eine allgemeinere Lösung beziehen.


4
2018-02-20 21:09



Von gitattributes (5) Handbuchseite Thema "Effekte"

text

Dieses Attribut aktiviert und steuert die End-of-Line-Normalisierung. Wenn ein   Textdatei ist normalisiert, ihre Zeilenenden werden in LF nach LF konvertiert   Repository. Um zu steuern, welcher Stil für Zeilenenden in der Arbeit verwendet wird   Verzeichnis, benutze das eol Attribut für eine einzelne Datei und die core.eol   Konfigurationsvariable für alle Textdateien.

Set

Wenn Sie das Textattribut für einen Pfad festlegen, wird die End-of-Line-Normalisierung aktiviert   und markiert den Pfad als Textdatei. Die End-of-Line-Konvertierung findet statt   ohne den Inhaltstyp zu erraten.

UnsetDurch das Deaktivieren des Textattributs auf einem Pfad wird Git nicht mitgeteilt   versuchen Sie eine End-of-Line-Konvertierung beim Ein- oder Auschecken.

core.autocrlf neu (1.7.2+) Git nicht benutzt, core.eol und korrekte Einstellung | Scharfstellung des Textattributs, das als zuverlässiger betrachtet wird


1
2018-02-17 07:16