SubGit - Experimente mit Zweigen und Zusammenführungen
Nachdem die ersten Experimente mit
SubGit
ausgesprochen gut verliefen, habe ich mir für heute vorgenommen,
ein wenig mit Zweigen (branches) und Zusammenführungen (merges)
rumzuspielen.
Ausgangslage
SubGit ist installiert wie in … beschrieben
Subversion-Repo “sandbox” ist innerhalb von SubGit initialisiert und repliziert wie in … beschrieben
Subversion-Repo “sandbox” vom SubGit-Repo repliziert mittels git clone git/sandbox.git
Zweig in Git anlegen
12345678910
sandbox$ git checkout -b subgit-branch
sandbox$ cat >subgit.txt <<EOF
> Dies ist ein Test von Subgit. Mal sehen,
> ob ein Zweig "einfach so" erstellt werden kann...
> EOF
sandbox$ git add subgit.txt
sandbox$ git commit -m "Neue Datei: subgit.txt"
[subgit-branch 3acd7b9] Neue Datei: subgit.txt
1 file changed, 3 insertions(+)
create mode 100644 subgit.txt
Zweig nach Subversion übertragen
12345678910111213141516171819202122
sandbox$ git push
fatal: Der aktuelle Branch subgit-branch hat keinen Upstream-Branch.
Um den aktuellen Branch zu versenden und den Remote-Branch
als Upstream-Branch zu setzen, benutzen Sie
git push --set-upstream origin subgit-branch
sandbox$ git push --set-upstream origin subgit-branchCounting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 367 bytes | 0 bytes/s, done.
Total 3 (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 3acd7b957feede6750c5519478d21930f123db31 to revision 106
remote: ... done.
remote: Synchronizing SVN and Git...
remote: ... done.
To /tmp/subgit/git/sandbox.git
* [new branch] subgit-branch -> subgit-branch
Branch subgit-branch konfiguriert zum Folgen von Remote-Branch subgit-branch von origin durch Rebase.
Danach sichten, ob der Zweig in Subversion angekommen ist:
12
sandbox$ svn ls https://svnhost.mydomain.com/svn/sandbox/branches
subgit-branch/
Sieht gut aus, es gibt den “subgit-branch”!
Zusammenführen des Zweiges in Git
12345678910111213141516171819
sandbox$ git checkout master
Gewechselt zu Branch 'master'
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
sandbox$ git merge subgit-branch
Aktualisiere e85015d..3acd7b9
Fast-forward
subgit.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 subgit.txt
sandbox$ git push
Total 0 (delta 0), reused 0 (delta 0)
remote: Synchronizing SVN and Git...
remote: translating SVN revisions to Git commits...
remote: translating Git commits to SVN revisions...
remote: ... done.
remote: Synchronizing SVN and Git...
remote: ... done.
To /tmp/subgit/git/sandbox.git
e85015d..3acd7b9 master -> master
Zusammenführen des Zweiges in Subversion
12345678910111213
$ svn checkout https://svnhost.mydomain.com/svn/sandbox/trunk sandbox-trunk
A sandbox-trunk/changetest
A sandbox-trunk/changetest/file.txt
...
A sandbox-trunk/renamed2.txt
A sandbox-trunk/rename-test-renamed.txt
Ausgecheckt, Revision 106.
$ cd sandbox-trunk
sandbox-trunk$ svn merge https://svnhost.mydomain.com/svn/sandbox/branches/subgit-branch
-- Aufzeichnung der Informationen für Zusammenführung von r107 in ».«:
U .
sandbox-trunk$ svn revert -R .
Rückgängig gemacht: ».«
Sieht gut aus, Subversion “merkt”, dass nicht zu tun ist.
Zweig in Subversion weiterbearbeiten
123456789101112131415161718192021222324252627
$ svn checkout https://svnhost.mydomain.com/svn/sandbox/branches/subgit-branch sandbox-subgit-branch
A sandbox-subgit-branch/changetest
A sandbox-subgit-branch/changetest/file.txt
A sandbox-subgit-branch/baumkonflikt
...
A sandbox-subgit-branch/subgit.txt
A sandbox-subgit-branch/rename-test-renamed.txt
Ausgecheckt, Revision 107.
$ cd sandbox-subgit-branch
sandbox-subgit-branch$ cat >>subgit.txt <<EOF
>
> Eine Erweiterung mittels Subversion
>
> EOF
sandbox-subgit-branch$ cat >subversion-neu.txt <<EOF
> Neue Datei, erzeugt in Subversion
> EOF
sandbox-subgit-branch$ svn add subversion-neu.txt
A subversion-neu.txt
sandbox-subgit-branch$ svn status
M subgit.txt
A subversion-neu.txt
sandbox-subgit-branch$ svn commit -m "Arbeit am SVN-Zweig"
Sende subgit.txt
Füge hinzu subversion-neu.txt
Übertrage Daten ..
Revision 108 übertragen.
Zweig in Git sichten
12345
sandbox$ git checkout subgit-branch
sandbox$ git pull
Zunächst wird der Branch zurückgespult, um Ihre Änderungen
darauf neu anzuwenden...
subgit-branch zu 736c76c930e4301e39ce8464300adbc7b3515f1f vorgespult.
Das Verzeichnis sieht gut aus!
Zusammenführen des Zweiges in Subversion
123456789101112131415
sandbox-trunk$ svn update
Aktualisiere ».«:
Revision 108.
sandbox-trunk$ svn merge https://svnhost.mydomain.com/svn/sandbox/branches/subgit-branch
-- Zusammenführen von r107 bis r108 in ».«:
A subversion-neu.txt
U subgit.txt
-- Aufzeichnung der Informationen für Zusammenführung von r107 bis r108 in ».«:
U .
sandbox-trunk$ svn commit -m "Merge mittels Subversion"
Sende .
Sende subgit.txt
Füge hinzu subversion-neu.txt
Übertrage Daten .
Revision 109 übertragen.
Master in Git sichten
123456789101112
sandbox$ git checkout master
Gewechselt zu Branch 'master'
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
sandbox$ git pull
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
Von /tmp/subgit/git/sandbox
3acd7b9..bc9f1e0 master -> origin/master
Zunächst wird der Branch zurückgespult, um Ihre Änderungen
darauf neu anzuwenden...
master zu bc9f1e0ff402ee46929d3459418b1d608870f847 vorgespult.
Das Verzeichnis sieht gut aus!
Zusammenführen des Zweiges in Git
12345
sandbox$ git checkout master
Bereits auf 'master'
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
sandbox$ git merge subgit-branch
Already up-to-date.
Fazit
Die Arbeit mit Zweigen und auch die Zusammenführung funktioniert
recht problemlos. Zusammenführungen in Git werden auch in Subversion
erkannt und umgekehrt.