Viele Svn-Repositories erfordern, dass neue Dateien ein svn: eol-style-Attribut haben. Gibt es eine Möglichkeit, dies mit git-svn zu erreichen?Kann ich Git-Svn Griff Svn: Eol-Stil?
Antwort
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
@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
.
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
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:
generiert SubGit Konfigurationsdatei:
$ subgit configure svn_repos
einstellen svn_repos/conf/subgit.conf Datei nach Bedarf Git Repository-Position, Zweige & Tags Layout angeben
usw.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.
Dies ist eine vollkommen vernünftige Antwort, aber bitte offenbaren Sie Ihre Verbindung mit dem SubGit-Projekt, http://StackOverflow.com/Help/Behavior –
@DaveBacher Just aktualisiert meine Antwort, danke für die Köpfe hoch. – vadishev
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