2017-03-25 8 views
0

Ich bin aus einem Repository auschecken, wo ich der einzige Windows-Benutzer in einem Meer von Mac und Linux bin. Meine IDE läuft auf meinem Windows-Rechner und der Code wird auf eine VM übertragen. Der Code wird nicht mit dem Host synchronisiert. Wenn ich bereit bin, meinen Windows-Host hinzuzufügen/zu committen, erhalte ich die Nachricht warning: LF will be replaced by CRLF. Unter Windows arbeiten, aber "LF wird durch CRLF ersetzt", wenn in Git

Das sind meine Git-Einstellungen:

core.symlinks=false 
core.autocrlf=true 
core.fscache=true 
color.diff=auto 
color.status=auto 
color.branch=auto 
color.interactive=true 
help.format=html 
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt 
diff.astextplain.textconv=astextplain 
rebase.autosquash=true 
credential.helper=manager 
core.editor='C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession 
core.filemode=false 
core.repositoryformatversion=0 
core.filemode=false 
core.bare=false 
core.logallrefupdates=true 
core.symlinks=false 
core.ignorecase=true 

Ich bin nicht sicher, warum core.filemode=false zweimal aufgeführt ist.

Gibt es einen Grund, warum ich diese Warnung auf Windows bekommen würde? Mache ich etwas Schwachsinniges in meinen Einstellungen (total möglich)? Oder macht das in diesem Szenario Sinn, und wenn ja, warum?

+1

See: https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf – IngoB

+0

Dank @IngoB! Das ist der verständlichste Zusammenbruch, den ich gesehen habe. – AreDubya

Antwort

1

Git hat zwei Orte, die Feeds Leitung gesteuert werden kann:

  • In den globalen Konfigurationseinstellungen auf Ihrem System
  • In der .gitattributes-Datei, die pro Repo-/Projekt gilt. Diese Einstellungen überschreiben die Konfigurationseinstellungen des Benutzers.

In Ihren Git-Einstellungen haben Sie core.autocrlf = true. Das heißt, du sagst Git, die Zeile zu ändern, die auf CRLF endet. Sie können dies ändern, um zu sehen, ob Git aufhört, die Zeilenenden zu ändern.

Ein besserer Ansatz kann sein, die richtigen Zeilenenden in der Datei .gitattributes zu setzen. Dies ist für das Repository im Stamm festgelegt und überschreibt die individuellen Einstellungen des Benutzers. Dies stellt sicher, dass alle Benutzer, die sich für das Repo verpflichten, die richtigen Zeilenenden haben. Da es sich anhört, als würden Sie an einem * nix-basierten Projekt arbeiten, wäre es wahrscheinlich ratsam, die Zeilenenden auf Zeilenvorschub zu setzen. In den .gitattribute-Dateien könnten Sie so etwas haben.

# Set all files to have LF line endings 
* text eol=lf 

Dieser Link bietet eine detailliertere Erläuterung der Optionen, die Sie in der Datei festlegen: https://help.github.com/articles/dealing-with-line-endings/

EDIT 1: Dachte, ich hinzufügen, das von der eigentlichen Git-Dokumentation: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

Kern .autocrlf

Wenn Sie unter Windows programmieren und mit Leuten arbeiten, die nicht sind (oder umgekehrt), werden Sie wahrscheinlich auf line-en stoßen ding Probleme zu einem bestimmten Zeitpunkt. Dies liegt daran, dass Windows in seinen Dateien sowohl ein Carriage-Return-Zeichen als auch ein Zeilenvorschubzeichen für Zeilenumbrüche verwendet, während Mac- und Linux-Systeme nur das Zeilenvorschubzeichen verwenden. Dies ist eine subtile, aber unglaublich nervige Tatsache der Cross-Plattform-Arbeit; Viele Editoren unter Windows ersetzen stillschweigend die vorhandenen LF-artigen Zeilen mit CRLF oder fügen beide Zeilenendezeichen ein, wenn der Benutzer die Eingabetaste drückt.

Git kann dies umgehen, indem CRLF-Zeilenendungen automatisch in LF konvertiert werden, wenn eine Datei zum Index hinzugefügt wird und umgekehrt, wenn Code in Ihrem Dateisystem ausgecheckt wird. Sie können diese Funktionalität mit der Einstellung core.autocrlf aktivieren.Wenn Sie auf einem Windows-Rechner sind, setzen Sie ihn auf true - dies wandelt LF Endungen in CRLF, wenn Sie Code überprüfen:

$ git config---global core.autocrlf wahr

Wenn Sie sind ein Linux oder Mac System, das LF Zeilenendungen verwendet, dann möchten Sie nicht Git zu automatisch konvertieren sie beim Auschecken von Dateien; Wenn jedoch versehentlich eine Datei mit CRLF-Endungen eingeführt wird, möchten Sie möglicherweise Git, um es zu beheben. Sie können Git sagen CRLF zu konvertieren auf verpflichten, LF aber nicht umgekehrt von core.autocrlf zu Eingangseinstellung:

$ git config---global core.autocrlf Eingang

Diese Einstellung sollten Sie verlassen mit CRLF-Endungen in Windows-Checkouts, aber LF-Endungen auf Mac- und Linux-Systemen und im Repository.

Wenn Sie einen Windows-Programmierer machen einen reinen Windows-Projekt sind, dann Sie können diese Funktionalität deaktivieren, in dem Repository die Zeilenumbrüche Aufnahme durch die Config Wert auf false gesetzt:

$ git config- --global core.autocrlf falsch

+0

Danke, deine Antwort plus @ IngoBs Link haben das wirklich für mich geklärt. – AreDubya

Verwandte Themen