2014-10-16 15 views
5

Mein AutoCRLF ist gleich wahr. In meinem cygwin-shell git status gibt mir eine korrekte Liste aller meiner Änderungen.Umgang mit EOL-Zeichen in Cygwin Git und Git für Windows Zugriff auf das gleiche Repository

In Git Bash git status sagt ich habe alle Dateien im Projekt geändert. Ich sehe dies auch in Git GUI und die Changes-Registerkarte in IntelliJ.

Wie ist das möglich, und noch wichtiger, wie kann ich es beheben?

+3

Git und Windows - kein Match im Himmel, das ist sicher! –

+0

Was bewirkt 'git config --get core.autocrlf'? – ryenus

+0

'true' in allen Fällen –

Antwort

3

Cygwin Git "sieht die Welt", als ob es auf einer POSIX-Plattform — dank der von Cygwin zur Verfügung gestellten Emulation läuft. Im Gegensatz dazu ist Git für Windows ein natives Windows-Programm, das keine Emulation verwendet und versucht, so nah wie möglich an Windows-Standards (so idiotisch wie möglich) zu sein. Das führt dazu, dass für Cygwin Git LF das Standard-EOL-Zeichen ist, während für Git für Windows die native EOL-Sequenz CRLF ist. So sehen beide Werkzeuge die Welt anders, und das erklärt, was du beobachtest. Bitte lesen Sie this recent thread für weitere Informationen (und speziell this message).

In jedem Fall, consider setting core.autocrlf to false anyway Kopfschmerzen zu vermeiden, die an diese "Magie" gebunden sind. Ich benutze nur GfW und habe am Ende diese Einstellung auf false (es ist standardmäßig true) für gut.

Sie könnten auch die sehr gut kommentierte .gitattributes file from the Mono project interessant finden, um zu studieren.

+0

Ok, danke! Mehrere Fragen: (1) Also schlagen Sie vor, autocrlf auf false zu setzen? (2) Irgendeine Idee, wenn es irgendwie eine Möglichkeit gibt, eine GUI-Darstellung von Git mit Cygwin zu erstellen? Manchmal muss ich komplexe Stufen/Commits machen, bei denen das Hinzufügen aller modifizierten Dateien keine Option ist. –

+0

@ArthurC, Entschuldigung für die lange Verzögerung. 1) Ja, wenn Sie auf "false" umschalten, wird jegliche Magie ausgeschaltet, die mit EOL-Sequenzen zusammenhängt, was dazu führen sollte, dass Gits auf beiden Seiten die gleiche Idee haben wie w.r.t. EOLs. Sie könnten dann CRLFs für bestimmte (oder alle) Dateien über '.gitattributes' erzwingen. Oder, wenn möglich, stellen Sie sicher, dass Sie Texteditoren verwenden, die keine Probleme mit einzelnen LFs als EOLs haben (Emacs und Vim sind zwei Beispiele). 2) Ich glaube, dass Cygwin Builds von Tcl/Tk hat und daher die GUI-Tools von Git, 'gitk' und' git gui', dort verfügbar sein sollten. – kostix

+0

@ArthurC, 2), Fortsetzung. Beachten Sie, dass es durchaus möglich ist, fein abgestuftes Staging nur mit Kommandozeilen-Tools durchzuführen: 'git add' kann verwendet werden, um eine ausgewählte Datei zu staffeln, und' git add --patch' kann verwendet werden, um ausgewählte * hunks * des Änderungen, die inszeniert würden, wenn Sie "git add" ohne Schmuck machen würden. Die Änderungen können auch selektiv über "git reset --patch" und "git checkout --patch" rückgängig gemacht werden: der erste stürzt die Änderungen vom Index ab, während der zweite den gleichen für den Arbeitsbaum tut. Nicht, dass ich dir raten würde, 'git gui' und so weiter zu benutzen, nur um zu zeigen, dass sie nichts besonderes tun, was Git nicht kann. – kostix

Verwandte Themen