Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

SubGit - Kopplung von Git und Subversion

Bislang habe ich immer GitSvn verwendet, wenn ich mit Git auf ein Subversion-Repository zugreifen wollte. Leider ist GitSvn fehlerhaltig und in der Handhabung teilweise etwas sperrig. Vor einiger Zeit bin ich nun über SubGit gestolpert und möchte das heute in der Version 2.0.1 einmal ausprobieren.

Installation

1
2
$ unzip .../subgit-2.0.1.zip
$ export SH="$(pwd)/subgit-2.0.1"

Git-Projekt aus Subversion-Projekt erzeugen

1
2
3
$ ${SH}/bin/subgit configure --svn-url https://83.236.132.107/svn/sandbox git/sandbox.git
SubGit version 2.0.1 ('Patrick') build #2706
...
  • Zweigzuordnung: Keine Aktionen notwendig, wenn in Subversion die Standard-Konventionen (trunk/branches/tags) verwendet werden!
  • Benutzer und Kennwort: Subversion-Benutzer und -Kennwort muß in “passwd” oder “config” hinterlegt werden!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ${SH}/bin/subgit install git/sandbox.git
SubGit version 2.0.1 ('Patrick') build #2706

Translating Subversion revisions to Git commits...
    Subversion revisions translated: 99.
    Total time: 85 seconds.

INSTALLATION SUCCESSFUL

Your copy of SubGit is not registered for repository at '.../git/sandbox.git'.
You may use SubGit for evaluation purposes.

For production use, please obtain registration key at http://www.subgit.com/ and register SubGit.
Registration is free for Open Source, Educational and Startup projects.

Git-Projekt auschecken

1
$ git clone .../git/sandbox.git sandbox

Projekt bearbeiten

Mit den üblichen Git-Kommandos!

Lokalen Git-Commit durchführen

Beim lokalen Git-Commit wird nur die “Kopie” im Verzeichnis “sandbox” aktualisiert!

1
$ git commit -m "...." .

Zentralen Git-Commit durchführen

Beim zentralen Git-Commit wird das zentrale Git-Repository “…/git/sandbox.git” aktualisiert und auch das Subversion-Repository:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 234 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Synchronizing SVN and Git...
remote:   translating SVN revisions to Git commits...
remote:   translating Git commits to SVN revisions...
remote:     translated commit da5a6078fba40f0686bf1cfd83b0d8c592ee88a1 to revision 100
remote: ... done.
remote: Synchronizing SVN and Git...
remote: ... done.
To /tmp/x/git/sandbox.git
   ea0262b..da5a607  master -> master

Konflikt mit Subversion

Hier der Ablauf, wenn man einen Konflikt mit Subversion “provoziert”. Änderung in Subversion durchführen:

1
2
svn/sandbox$ echo ERNIE >>conflict.txt
svn/sandbox$ svn commit -m "Added ERNIE"

Nun die gleiche Datei in Git ändern:

1
2
3
4
5
6
git/sandbox$ echo BERT >>conflict.txt
git/sandbox$ git commit -m "Added BERT"
git/sandbox$ git push
To /tmp/x/git/sandbox.git
 ! [rejected]        master -> master (fetch first)
...

Fazit

SubGit sieht schonmal sehr vielversprechend aus. Es ist sehr einfach einzurichten und funktioniert dem ersten Eindruck nach tadellos. Für mich zu klären sind noch die Lizenzbedingungen sowie der Einsatz “im Team”.

Änderungen

Comments