Was ich so treibe...

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

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

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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:

1
2
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ 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

1
2
3
4
5
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
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.

Comments