# SVN "richtig" benutzen - wie?



## White_Fox (2. Okt 2019)

Guten Abend allerseits

Bisher habe ich in SVN einfach wüst committed, ohne mich um Tags, Branches, Trunks und dergleichen zu scheren. Das will ich ändern, da ich jetzt auch eine vernünftige Versionsnummerierung haben will.

Daher meine Frage: Was passiert eigentlich genau, wenn ich einen Branch oder ein Tag erstelle? Soweit ich das sehe, ist das nicht wirklich in Stein gemeißelt, wann was verwendet wird. Wie macht ihr das bei euch?


----------



## mihe7 (2. Okt 2019)

Subversion? Das habe ich zuletzt vor x Jahren verwendet. Wenn es Dir möglich ist, verwende git. 

Ansonsten: ein Tag dient in der Regel dazu, einen Stand festzuhalten. Wird also nicht für die weitere Entwicklung verwendet - womit wir auch schon den Unterschied zum Branch hätten


----------



## Der Wissende (2. Okt 2019)

Guten Abend, 

Der Hauptstand deines Codes nennt sich trunk, jeder commit erzeugt eine neue Version. Wenn du nun ein Tag setzt gibst du einem commit einen Namen also commit 42 wird zu 'release 1.0.0'. 
Ein branch wiederum ist eine Kopie von deinem trunk. Auf dieser Kopie kannst du nun unabhängig von der Hauptentwicklung weiter arbeiten, zum Beispiel könnte es sein dass du ein Bugfix Release für Version 1.0.0 erstellen willst, aber du hast jetzt schon im trunk neue Features, die du aber noch nicht releasen willst. 
In SVN sind branches, wirklich Kopien von allem, daher sind branches dort relativ teuer zum erstellen und zum wechseln auf den branch. In git ist der Mechanismus viel besser, weil nur die geänderten Daten gemerkt werden, deshalb verwendet man in git viel häufiger branches um zum Beispiel Features isoliert von der restlichen Applikation entwickeln zu können.


----------



## White_Fox (2. Okt 2019)

mihe7 hat gesagt.:


> Subversion? Das habe ich zuletzt vor x Jahren verwendet. Wenn es Dir möglich ist, verwende git.


Ich hab das mal (kurz!) in Erwägung gezogen, hab einerseits festgestellt daß das recht kompliziert ist, und andererseits den Mehrwert für mich nicht gesehen.

Und da ich zur Zeit nur auf einem einzelnen Laptop arbeite (nichtmal einen NAS, einen zweiten PC hab ich aktuell, nur meinen Laptop)...welchen Sinn macht das da, auf Git umzusteigen?

Nachschlag:
@Der Wissende 
Danke...ich glaub jetzt weiß ich Bescheid. 
(Und danke für die Erklärung, was Git da anders macht.)


----------



## Der Wissende (2. Okt 2019)

White_Fox hat gesagt.:


> Und da ich zur Zeit nur auf einem einzelnen Laptop arbeite (nichtmal einen NAS, einen zweiten PC hab ich aktuell, nur meinen Laptop)...welchen Sinn macht das da, auf Git umzusteigen?


Du brauchst für git keinen Server. Dein repository zur versions Verwaltung ist lokal, du kannst einen remote Server zum sichern haben, aber musst nicht. Bei SVN brauchst du einen Server.


----------



## White_Fox (2. Okt 2019)

Der Wissende hat gesagt.:


> Bei SVN brauchst du einen Server.


Hm...das SVN-Repository gammelt hier auch lokal bei mir herum, definitiv ohne Server. (Tortoise SVN 1.8)
Bei der Wahl des Repositories kann man auch Dateipfade (auch lokale) angeben, von daher bin ich mir relativ sicher daß da auch kein virtueller Server im Hintergrund läuft.

Nur für den Fall der Fälle: wie aufwändig gestaltet sich ein Umzug von SVN nach Git? Kann man das relativ einfach konvertieren?


----------



## mihe7 (2. Okt 2019)

White_Fox hat gesagt.:


> hab einerseits festgestellt daß das recht kompliziert ist, und andererseits den Mehrwert für mich nicht gesehen.


Ich würde nicht sagen, dass es komplizierter als Subversion ist, nur etwas anders. Gerade Branches sind das Killer-Feature von git. 

Was den Mehrwert betrifft: das ging mir genauso. Ich habe es erst verstanden, als ich es verwendet habe. 



White_Fox hat gesagt.:


> Bei der Wahl des Repositories kann man auch Dateipfade (auch lokale) angeben, von daher bin ich mir relativ sicher daß da auch kein virtueller Server im Hintergrund läuft.


In git liegt das lokale Repository an einer Stelle im Projektverzeichnis (.git). Bei Subversion hast Du ein Repository an anderer Stelle im Dateipfad, darüber hinaus legt Subversion in jedem Unterverzeichnis Deines Projekts .svn-Verzeichnisse (oder waren es Dateien?) an. 

Bei Subversion hast Du immer nur eine (= 1) Arbeitskopie. Bei git hast Du alle gleichermaßen im Zugriff. Um z. B. zwischen Branches zu wechseln, machst Du einfach ein checkout - im gleichen Verzeichnis, versteht sich. 

Ernsthaft: probier es aus und spiel ein wenig rum. Du wirst den Unterschied recht schnell feststellen


----------



## Der Wissende (2. Okt 2019)

White_Fox hat gesagt.:


> Hm...das SVN-Repository gammelt hier auch lokal bei mir herum, definitiv ohne Server. (Tortoise SVN 1.8)


Hab schon ewig nicht mehr mit svn gearbeitet, damals kannte ich zumindest die Möglichkeit nicht. 




White_Fox hat gesagt.:


> Nur für den Fall der Fälle: wie aufwändig gestaltet sich ein Umzug von SVN nach Git? Kann man das relativ einfach konvertieren?


Wenn du Tortoise git verwenden willst, scheint es ziemlich einfach zu sein https://smexyyweby.wordpress.com/20...pository-to-git-using-tortoisegit-on-windows/


----------



## mihe7 (2. Okt 2019)

White_Fox hat gesagt.:


> Kann man das relativ einfach konvertieren?


Ja. Ich habe das seinerzeit nach https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git gemacht (wichtig war mir die Zuordnung der Benutzer). 

Die Kurzversion: `git svn clone file:///home/user/svn/repo /home/user/svn/repo.git` (https://stackoverflow.com/questions/49782802/export-svn-dump-to-git-or-github)


----------



## White_Fox (2. Okt 2019)

Hm, ich werde das mal im Hinterkopf behalten.
Aber ich merk grad, das wird etwas viel auf einmal. Ich mache mir darum mal Gedanken, wenn ich Gradle gebändigt habe.


----------

