Wie vermeide ich git-svn und svn CRLF Probleme wie dieses?

8

Ich benutze git svn und heute habe ich Probleme bekommen.

Ich habe git svn clone gemacht und eine Weile an meinem Projekt gearbeitet. Nach ein paar Tagen habe ich meine Arbeit auf die svn remote ( git svn dcommit ) geschoben. Dann habe ich versucht, das Projekt mit TortoiseSVN auszuchecken und zu sehen, ob alles in Ordnung ist. Leider wurde alles in Unix-Zeilenendungen konvertiert, und VC6 konnte das Projekt nicht öffnen.

Also war meine git-Arbeitskopie CRLF, aber meine SVN-Arbeitskopie war LF. Ich gehe davon aus, dass git es entweder während git commit oder git svn dcommit konvertiert hat.

Sehe ich richtigerweise davon aus, dass ich all diese Probleme vermeiden kann, wenn ich core.autocrlf = false für meine git-Arbeitskopie festlege? Wird diese Kraft die Newlines in Ruhe lassen? Gibt es noch etwas, das getan werden muss, um git svn einfach zu benutzen, ohne dass es Probleme für meine Mitarbeiter gibt?

(Es kann auch interessant sein zu erwähnen, dass ich git svn schon einmal auf demselben Rechner benutzt habe, ohne die Einstellungen zu berühren, und dies war das erste Mal, dass so etwas passiert ist.)

    
dr Hannibal Lecter 09.08.2012, 13:19
quelle

1 Antwort

0

Subversion hat die Möglichkeit, EOL-Konvertierungseinstellungen für die einzelnen Dateien vorzunehmen. Und tatsächlich hat Git es auch in Form von .gitattributes-Dateien ('text' und 'eol' Attribute). Für den allgemeinen Fall ist core.autocrlf nicht genug.

Wenn Sie es auf false setzen, haben alle Dateien mit svn: eol-style = native eine LF-Zeile, die in git-svn working copy endet, was für Windows nicht erwartet wird.

Wenn Sie es auf "true" setzen, werden alle Zeilenenden in LFs konvertiert und in Form von LFs (immer) an SVN gesendet.

Eigentlich sollte svn:eol-style=unset dem Attribut '-text' git entsprechen (also keine Konvertierung), svn:eol-style=LF --- zu 'eol = lf' Attribut und svn:eol-style=CRLF --- zu 'eol = crlf' Attribut ; svn:eol-style=native ist systemabhängig und kann daher von einer nicht versionierten eol-Einstellung gesteuert werden, daher lautet das entsprechende git-Attribut '! eol' (das würde bedeuten, dass die EOL-Einstellung von core.eol von .git / config abgerufen wird).

Anstelle von git-svn können Sie jede Lösung verwenden, die svn: eol-style automatisch in die entsprechenden .gitattibruest-Werte für einzelne Dateien konvertiert und umgekehrt. Eine Lösung ist die serverseitige: Sie installieren SubGit in Ihr SVN-Repository und verwenden einfach die reine Git-Schnittstelle, die SubGit erstellt:

%Vor%

Dann klonen Sie es auf dem Client und setzen Sie core.eol für Windows auf 'crlf' und für andere Betriebssysteme auf 'lf' (der Standardwert ist 'lf').

%Vor%

Und danach verhält sich Git genauso wie SVN.

Alternativ können Sie auf der Client-Seite SmartGit verwenden: Sie können das SVN-Repository damit klonen (nicht Öffnen Sie das vorhandene git-svn-Repository) --- und konvertiert dann svn: eol-style in .gitattributes. In diesem Fall ist keine zusätzliche core.eol-Einstellung erforderlich, SmartGit wird sich darum kümmern.

    
Dmitry Pavlenko 09.08.2012 15:01
quelle