====== git und SVN====== Szenario: Ein vorhandenes SVN Repository soll auf einen git Server gehostet werden und dann dort weiterentwickelt werden. ===== Virtuelle Maschine ===== Eine virtuelle Maschine auf der diese Anleitung erstellt wurde liegt auf dem Laptop im Verzeichnis D:\vm_images\TQ ubuntu - svn git test. ===== Test SVN Server ===== Zum Testen wurde ein SVN Server aufgesetzt (nach Anleitung: https://help.ubuntu.com/community/Subversion). Zuerst muss subversion und apache2 webserver (Wird nur für http gebraucht) installiert werden. tq@ubuntu:~$ sudo apt-get update tq@ubuntu:~$ sudo apt-get install apache2 subversion Eine Gruppe für subversion erstellen und eigenen User und www-data (webserver user) zu dieser Gruppe hinzufügen: tq@ubuntu:~$ sudo addgroup subversion tq@ubuntu:~$ sudo adduser tq subversion tq@ubuntu:~$ sudo adduser www-data subversion Ein Wurzelverzeichnis für die SVN Repositories erstellen: tq@ubuntu:~$ sudo mkdir /srv/svn tq@ubuntu:~$ cd /srv/svn tq@ubuntu:/srv/svn$ sudo chown root:subversion . tq@ubuntu:/srv/svn$ sudo chmod g+w . SVN Repository erstellen: tq@ubuntu:/srv/svn$ sudo svnadmin create /srv/svn/testproject/ tq@ubuntu:/srv/svn$ sudo chown -R www-data:subversion testproject/ tq@ubuntu:/srv/svn$ sudo chmod -R g+rws testproject/ ==== Test SVN Repository ==== Verzeichnis für Arbeitskopie erstellen: tq@ubuntu:~$ mkdir ~/src tq@ubuntu:~$ cd $_ Jetzt kann man schon mit dem ''file:'' Protokoll das Repository auschecken: tq@ubuntu:~/src$ svn co file:///srv/svn/testproject/ ===== git-svn ===== git-svn installieren und das SVN Repository in git überführen: tq@ubuntu:~$ sudo apt-get install git-core git-svn tq@ubuntu:~$ cd src tq@ubuntu:~/src$ git svn clone file:///srv/svn/testproject/ gitsvntest ==== Kann man mit git-svn svn commits in git mergen? ==== Änderung im SVN machen und commiten: tq@ubuntu:~/src/testproject$ echo "svn edit"> a tq@ubuntu:~/src/testproject$ svn st M a tq@ubuntu:~/src/testproject$ svn ci -m "svn edit" tq@ubuntu:~/src/testproject$ svn up At revision 3. Die Änderungen werden nun per git-svn übernommen: tq@ubuntu:~/src/gitsvntest$ git svn rebase M a r3 = 6990c465a85965e235773c4a8d50d8216f9b4318 (refs/remotes/git-svn) First, rewinding head to replay your work on top of it... Fast-forwarded master to refs/remotes/git-svn. tq@ubuntu:~/src/gitsvntest$ git log -n 1 commit 6990c465a85965e235773c4a8d50d8216f9b4318 Author: tq Date: Fri Dec 16 10:05:09 2011 +0000 svn edit git-svn-id: file:///srv/svn/testproject@3 7b2558ac-5255-4b2b-b089-ca010ff406 ==== Was passiert wenn auch Änderungen im git existieren? ==== Änderung im svn Projekt: tq@ubuntu:~/src/testproject$ echo "svn2 änderung" >> a tq@ubuntu:~/src/testproject$ svn ci -m "svn2 edit" Änderung im git Projekt: tq@ubuntu:~/src/gitsvntest$ echo "git änderung" >> a tq@ubuntu:~/src/gitsvntest$ git commit -a -m "git änderung" Jetzt der import per git-svn: tq@ubuntu:~/src/gitsvntest$ git svn rebase M a r4 = ca0e45a8d1d89667f2347280ff230176178c1d43 (refs/remotes/git-svn) First, rewinding head to replay your work on top of it... Applying: git änderung Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merging a CONFLICT (content): Merge conflict in a Failed to merge in the changes. Patch failed at 0001 git änderung When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort". rebase refs/remotes/git-svn: command returned error: 1 tq@ubuntu:~/src/gitsvntest$ ls a src tq@ubuntu:~/src/gitsvntest$ cat a svn edit <<<<<<< HEAD svn2 änderung ======= git änderung >>>>>>> git änderung tq@ubuntu:~/src/gitsvntest$ vi a tq@ubuntu:~/src/gitsvntest$ git rebase --continue You must edit all merge conflicts and then mark them as resolved using git add tq@ubuntu:~/src/gitsvntest$ git add a tq@ubuntu:~/src/gitsvntest$ git rebase --continue Applying: git änderung Jetzt muss noch irgendwie die Änderung ins SVN tq@ubuntu:~/src/gitsvntest$ git svn dcommit Committing to file:///srv/svn/testproject ... M a Committed r5 M a r5 = d5b4eb0575010ee38094e5221639865d3f13d9a7 (refs/remotes/git-svn) No changes between current HEAD and refs/remotes/git-svn Resetting to the latest refs/remotes/git-svn tq@ubuntu:~/src/testproject$ svn up U a Updated to revision 5. tq@ubuntu:~/src/testproject$ cat a svn edit svn2 änderung git änderung ===== Test mit reccoware svn repository ===== tq@ubuntu:~$ cd ~/src/ tq@ubuntu:~/src$ git svn clone --username twaldecker https://svn.reccoware.de/tq/system/trunk tq Dauert sehr lange. Um nur die letzten paar revisionen zu importieren kann man folgendes Kommando verwenden: tq@ubuntu:~/src$ git svn clone -r 140:HEAD --username twaldecker https://svn.reccoware.de/tq/system/trunk tq ===== Quellen ===== * http://trac.parrot.org/parrot/wiki/git-svn-tutorial * https://help.ubuntu.com/community/Subversion