2010-01-24 1 views

Antwort

12

Sie können versuchen, Autoproperties ([1] [2]) in Subversion-Konfiguration. Es stellt sicher, dass während des Hinzufügens neuer Dateien svn: eol-style korrekt eingestellt ist.

AFAIU git-svn verwendet nur svn in internen Funktionen, und es sollte die Subversion-Konfiguration laden und Auto-Requisiten für neue Dateien setzen.

Ok, ich habe es getestet, es funktioniert.

Beispiel .subversion/config:

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.cpp = svn:keywords=Id Revision;svn:eol-style=native 
*.cs = svn:keywords=Id Revision;svn:eol-style=native 
+1

Aber Vorsicht: meiner Erfahrung nach wird 'git-svn' das' svn: eol-style = native' Attribut beim Commit setzen, wie du es beschreibst, aber * not * wird die festgeschriebenen Dateien tatsächlich in LF Zeilenendungen konvertieren vor dem Begehen. Daher werden alle CRLF-Zeilenendungen intakt an den Subversion-Repo übergeben, aber subversion erwartet, dass alle "svn: eol-style = native" attributierten Dateien mit LF-Zeilenenden gespeichert werden. Das Endergebnis ist, dass das erste Mal, wenn jemand eine solche Datei aus einer Subversion-Arbeitskopie bearbeitet und festlegt, der CRLF in LF-Konvertierung enthalten ist. – ntc2

7

@silk's answer above ist nur eine Teillösung. Eine vollständige Lösung umfasst auch die Konfiguration von git, um CRLF beim Commit in LF zu konvertieren. So, zusätzlich zu dem, was @silk vermuten lässt, sollten Sie auch tun:

git config --global core.autocrlf input 
git config --global core.safecrlf warn 

Oder:

git config --global core.safecrlf warn 
git config --global core.attributesfile ~/.gitattributes 
echo '* text=auto' >> ~/.gitattributes 

Erläuterung:

Nach meiner Erfahrung git-svn gesetzt das svn:eol-style=native Attribut begehen, wie @silk beschreibt, aber wird nicht tatsächlich konvertieren die festgeschriebenen Dateien in LF-Zeilenenden vor dem Festschreiben. Somit werden alle CRLF-Zeilenendungen intakt an den Subversion-Repo übergeben, aber subversion erwartet, dass alle svn:eol-style=native attributierten Dateien mit LF-Zeilenenden gespeichert werden. Das Endergebnis ist, dass das erste Mal, wenn jemand eine solche Datei aus einer Subversion-Arbeitskopie bearbeitet und festlegt, der CRLF in LF-Konvertierung enthalten ist.

So sollte eine komplette Lösung zwingen, Git vor dem Commit Dateien in LF-Zeilenenden zu konvertieren. Sie können dies tun, indem Sie core.autocrlf=input setzen, was bedeutet "Konvertiere alle CRLF in LF beim Commit, aber führe keine umgekehrte Konvertierung beim Checkout durch" und core.safecrlf=warn oder core.safecrlf=true, was dich warnt oder stoppt, wenn du versuchst eine Datei zu committen CRLF-Zeilenendungen. Die autocrlf Einstellung wird sicherstellen, dass diese CRLFs konvertiert werden, so dass die safecrlf=true wahrscheinlich übermäßig ist. Siehe git help config.

Alternativ können Sie mithilfe von Git-Attributen die Konvertierung erzwingen, indem Sie text=auto für alle Dateien festlegen. Um dies global zu tun, müssen Sie eine Attributdatei in core.attributesfile angeben. Siehe git help attributes.

+0

Noch eine Sache: Bei diesen Konfigurationen behalten festgeschriebene Dateien alle CRLF-Zeilenenden in Ihrer git-svn-Arbeitskopie bei, bis Sie sie erneut auschecken. Wenn Sie * nix haben und LF-Zeilenenden möchten, können Sie das erneute Auschecken erzwingen, indem Sie zu einer Verzweigung wechseln, die die CRLF-Dateien nicht enthält, und dann wieder zurückschalten. Alternativ können Sie 'dos2unix' verwenden, um die Zeilenenden zu konvertieren, und dann' git add' die Dateien; Ein 'git commit' ist nicht notwendig, da die LF-Zeilenendungen erwartet werden. – ntc2

2

Verwenden Sie SubGit.

Von den allerersten Builds unterstützt es die richtigen Subversion-Eigenschaften zu .gitattributes/.gitignore Konvertierung (und umgekehrt). Dazu gehören unter anderem svn: eol-style und 'eol', svn: mime-type und 'text', svn: ignore und .gitignore conversion.

SubGit ist eine serverseitige Lösung - man muss sie in das Subversion-Repository installieren. Danach kann jeder Subversion- oder Git-Client Änderungen in dieses Repository senden. Weitere Informationen finden Sie unter SubGit documenration.Im Allgemeinen ist es ziemlich einfach, es zu benutzen:

  1. generiert SubGit Konfigurationsdatei:

    $ subgit configure svn_repos 
    
  2. einstellen svn_repos/conf/subgit.conf Datei nach Bedarf Git Repository-Position, Zweige & Tags Layout angeben

    usw.
  3. Beenden Sie die Installation:

    $ subgit install svn_repos 
    

In diesem Moment konvertiert SubGit alle Revisionen von Ihrem Subversion-Repository in das Git-Repository. Dann installiert es seine benutzerdefinierten Hooks, die von eingehenden Änderungen ausgelöst werden. Auf diese Weise konvertiert SubGit bei jedem SVN-Commit kontinuierlich Subversion-Revisionen und bei jedem Git-Push Commit.

SubGit ist ein kommerzielles Projekt, aber es ist kostenlos für kleine Teams, Open-Source- und akademische Projekte. Und ich bin einer der SubGit-Entwickler.

+0

Dies ist eine vollkommen vernünftige Antwort, aber bitte offenbaren Sie Ihre Verbindung mit dem SubGit-Projekt, http://StackOverflow.com/Help/Behavior –

+0

@DaveBacher Just aktualisiert meine Antwort, danke für die Köpfe hoch. – vadishev