2009-10-05 13 views
9

Wir haben ein Repository, das von Subversion in Git exportiert wurde. Dieses Repository wird von Mac-, Linux- und PC-Benutzern verwendet. Unnötig zu sagen, dass die Zeilenenden ein Durcheinander sind. Einige Dateien enden in CRLF, LF oder CR und einige haben eine Mischung aus allen zwei oder drei in einer Datei.Klärung/Klärung von Zeilenendeproblemen in GIT

Hinzufügen autocrlf = true scheint die Dinge etwas zu beheben. Die Diffs kommen jedoch manchmal ziemlich komisch vor, dh eine Einzeilenbearbeitung an einer Datei bewirkt, dass alle Zeilen im Diff geändert erscheinen (ich nehme an, dass es aufgrund der Zeilenendungen für die Datei neu geschrieben wurde) und manchmal eine Zeile an a Datei funktioniert korrekt.

Gibt es eine Website, oder könnte jemand bitte erklären, wie wir das durcheinander bringen können? Gibt es eine Git-Einstellung, die wir setzen müssen, oder müssen wir eine Massenaktualisierung aller Dateien vornehmen, um eine bestimmte Zeilenendung zu haben oder was?

Jede Hilfe wäre sehr geschätzt, da es ein ziemlich Durcheinander ist!

(Die folgende stackoverflow post scheint es, könnte helfen, obwohl sie beantworten tut, was passiert, wenn wir einen anderen Mac oder PC oder Linux-Benutzer begehen ein anderes Patch haben)

Antwort

5

Zusammenhang SO Frage wird sein, für Sie von Interesse:

Trying to fix line-endings with git filter-branch, but having no luck

Und hier ist a link auf ähnliche Ratschläge von Github.

Wie in Greg Hewgills Beitrag erwähnt, ist es auch ratsam zu überprüfen, dass zukünftige Committer einen Editor verwenden, der die neue Richtlinie zum Zeilenende korrekt verarbeitet.

Wenn Sie sagen "Hinzufügen von autocrlf = wahr scheint die Dinge leicht zu beheben." Ich nehme an, dies wurde mit .gitattributes getan.

+2

Also Schritt eins: Fix die Zeilenenden im Repository. Schritt 2: Sagen Sie den Leuten, dass sie 'git config --global core.autocrlf true' verwenden sollen, und schlagen Sie sie dann herum, wenn sie sich verpflichten, ohne sie zu benutzen? – corydoras

+0

@corydoras: Das Schöne an '.gitattributes' ist, dass die Datei in das Repository verschoben werden kann. Wenn der 'core.autocrlf' in einer Datei gesetzt und gedrängt wird, dann glaube ich, dass er Zeilenenden in beliebigen Klonen erzwingen sollte. Ich bin mir jedoch nicht sicher, ob neue Klone benötigt werden oder ob jeder Committer dem Rat auf Github folgen müsste. –

5

Ich würde versuchen, so viel wie möglich, auf eine zu standardisieren Die allgemeine Zeilenendung wird in allen Quelldateien in Ihrem Projekt verwendet. Ein guter zu wählen, könnte LF nur sein, aber ich würde überprüfen, dass der/die von den Entwicklern verwendete (n) Editor (e) die gewählte gemeinsame Zeilenendung vernünftig und korrekt handhaben. (In diesem Fall sanely Änderungsmittel nicht jede Zeile in der Datei nur, weil der Benutzer eine Zeile geändert.)

Sie müssen möglicherweise eine große Cleanupauftrag tun und haben einen großen begehen das ändert alle Dateizeilenenden zu Ihrer gewählten Standardendung. Dies wird umständlich sein, aber wahrscheinlich nicht so umständlich wie das Aufrechterhalten einer Vielzahl von verschiedenen Zeilenenden. Diese