Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   SVN richtig verwenden? (https://www.delphipraxis.net/162020-svn-richtig-verwenden.html)

Angel4585 2. Aug 2011 11:18

SVN richtig verwenden?
 
Guten Tag!

Ich habe bisher eher wenig Wert auf Versionsverwaltung gelegt, da in Schule sowie in Firma nix damit gemacht wurde (schon bissl erbärmlich für ne Firma).
Nunja ich schaue mir jetzt SVN für private Projekte genauer an und hab mir VisualSVN auf meinem Homeserver installiert.

Wie gehe ich jetzt richtig damit um?
Sachen über Versionsverwaltungen die ich gehört hab sind:
- Im trunk-Ordner liegen die aktuellen Entwicklungen
- Niemals nur im trunk arbeiten
- Im branch-Ordner liegen Ausgliederungen, wenn man zB ne andere Vorgehensweise testen will
- Nie unausführbaren Code commiten
- Es gibt mindestens zwei Arten sein Repository zu strukturieren
Code:
  A:
    svn/project1/trunk
    svn/project2/trunk
  B:
    svn/trunk/project1
    svn/trunk/project2
Alles was ich bisher über Versionsverwaltungen gelernt hab basiert auf der Idee, dass verschiedene Entwickler an einem Projekt arbeiten und jeder Entwickler hat einen konstanten Rechner.
Ich arbeite allerdings momentan allein an meinem Projekt und hab mehrere Rechner. Einmal mein Notebook unterwegs und einmal mein Rechner zuhause.
Beim Notebook kann ich nie garantieren wie weit ich mit coden komm weshalb da schonmal unfertiger Code rumliegt(hängt vom ÖPNV ab).
Wenn ich heimkomm möcht ich dann aber an meinem Rechner weitercoden, muss also unfertigen Code commiten was man aber ja nicht soll.

Meine Idee wär jetzt, ich leg einen working Ordner im Repo an in dem ständig der aktuelle Code kommt. Wenn ich ne fertige Verison hab kommt die in den trunk Ordner.

Oder was meint ihr? Wie macht ihr das so?
Habt ihr sonst noch Tipps zu Versionsverwaltung/SVN?

Phoenix 2. Aug 2011 12:21

AW: SVN richtig verwenden?
 
Vielleicht ist ja Subversion gar nichts für Dich sondern eher Git oder Mercurial.

Das sind verteilte Versionierungssysteme. Hier committest Du sehr häufig (auch nicht kopilierbares Zeug) in lokale Branches. Sobald der Branch (oder ein Teil davon) fertig ist, pushst Du ihn in das Repo auf Deinem Rechner daheim (oder pullst von da aus vom Notebook).
Bis dahin bleibt der aber lokal, 'verschmutzt' so nicht Dein Master-Repo und Du hast hinterher vor allem sogar die einzelnen Entwicklunsschritte in der Versionierung, die Dir bei SVN sonst fehlen würden.

Ansonsten: Ja nach Organisation - insbesondere wenn Du alleine bist - kannst Du schon auf dem Trunk arbeiten wenn Du parallel dazu einen früheren Branch als 'Release' vorhanden hast der in sich feature-Complete ist. Das stört nicht wirklich. Bei SVN ist das branchen und mergen nicht ganz so angenehm wie bei distributed Systemen wie Git oder Mercurial (HG).

Angel4585 2. Aug 2011 12:42

AW: SVN richtig verwenden?
 
Also würdest du empfehlen bei für jedes Release ein Branch zu erzeugen und sonst immer im Trunk zu arbeiten?
Was wenn irgendwann ein zweiter oder dritter Entwickler dazukommt?
Werden Branches überhaupt getrennt vom Rest behandelt? Also haben die wieder eigene Revision Nummern? :gruebel:
Dann könnte ich nämlich ein eigenen Branch anlegen und immer in den committen und erst wenn meine Version nichtmehr schmutzig ist in den Trunk damit.

SVN gefällt mir eigentlich schon soweit aber ich kann mir die andern auch mal anschauen.
Da ich momentan hauptsächlich mit Java/NetBeans arbeite bietet sich Mercurial evtl auch an, das ist genauso wie SVN direkt dort mit drin.

Phoenix 2. Aug 2011 12:53

AW: SVN richtig verwenden?
 
Zitat:

Zitat von Angel4585 (Beitrag 1114657)
Also würdest du empfehlen bei für jedes Release ein Branch zu erzeugen und sonst immer im Trunk zu arbeiten?
Was wenn irgendwann ein zweiter oder dritter Entwickler dazukommt.

Jain. Nicht unbedingt. Du kannst natürlich auch für jedes neue Feature einen eigenen Branch anlegen und den dann wenn er abgeschlossen wieder zurück mergen. Das sollte man auch mit mehreren Entwicklern machen (wobei wir hier auch schon zu fünft auf dem Trunk gearbeitet haben, das geht ohne Probleme). Das Branchen und Mergen ist wie gesagt mit SVN nicht ganz so angenehm wie mit Git.

Zitat:

Zitat von Angel4585 (Beitrag 1114657)
Werden Branches überhaupt getrennt vom Rest behandelt? Also haben die wieder eigene Revision Nummern? :gruebel:
Dann könnte ich nämlich ein eigenen Branch anlegen und immer in den committen und erst wenn meine Version nichtmehr schmutzig ist in den Trunk damit.

Nein. Ein Repository in SVN hat immer eine eineindeutige Revisionsnummer. Und die wird immer erhöht, egal in welchen Pfad commited wird. Trunk, branches und tags sind kein SVN-Feature, sondern lediglich eine Ordnerstruktur innerhalb der Versionierung, die sich mal irgendjemand ausgedacht hat und die deshalb ungeuer viele (aber nicht alle) Leute auch so nachbilden.

Zitat:

Zitat von Angel4585 (Beitrag 1114657)
SVN gefällt mir eigentlich schon soweit aber ich kann mir die andern auch mal anschauen.
Da ich momentan hauptsächlich mit Java/NetBeans arbeite bietet sich Mercurial evtl auch an, das ist genauso wie SVN direkt dort mit drin.

Wie gesagt: War nur ne Idee bzw. ein Alternativvorschlag. Mir selber erschien das am Anfang ungeheuer komplex, aber letzlich habe ich alle meine privaten Projekte umgezogen. Ein riesen Vorteil ist halt, dass man lokal immer das komplette Repo inkl. aller Versionen hat. Das braucht freilich mehr platz, aber ich bin nicht auf eine Internetverbindung angewiesen wenn ich mal die Historie eines bestimmten Files angucken will etc. Und meine lokalen Commits inkl. Historie werden auch immer mit auf den Server (bzw. das, was ich als mein Master-Repo pflege) gesynced. So ganz uncool ist das nicht ;-)

r2c2 2. Aug 2011 13:54

AW: SVN richtig verwenden?
 
Der "traditionelle" Ansatz sind die hier schon erwähnten Feature Branches. Aber das hat seine Nachteile. Insbesondere das Mergen kann sehr unangenehm werden. Mit Git/mercurial/etc. wird das auch nur ein bisschen besser. Substantiell ändert sich an der Problematik dadurch nichts.

Wenn man alleine arbeitet, ist das alles nicht so tragisch, aber schon mit zwei Entwicklern wirds irgendwann unlustig. Deshalb vertreten manche (insbesondere Leute aus der "agilen" Ecke) eine andere Auffassung: Contiuous Integration. Dabei committed jeder auf den master/trunk/whatever und zwar häufig (mindestens einmal am Tag, eher häufiger).

Damit der Code funktionstüchtig bleibt, obwohl man nicht fertig mit der Implementierung ist, benutzt man Feature Toggles. Also Schalter, die neues Features an- und ausschalten.

Ich hab den Ansatz bisher noch nicht ausprobiert, aber er klingt vernünftig. Dass das Mergen fehleranfällig ist und nicht gerade Spaß macht, hab ich nämlich schon erfahren. Bei Gelegenheit will ich das also mal versuchen.

Informationen darüber:
http://www.thoughtworks.com/perspect...nuous-delivery (interessantes Video)
http://martinfowler.com/articles/con...tegration.html (unfangreicher Atikel)

mfg

Christian

s.h.a.r.k 2. Aug 2011 21:08

AW: SVN richtig verwenden?
 
Hier gibts auch noch einen interessanten Artikel, der zwar auf Mercurial genauer eingeht -- Git und Mercurial liegen, wie im Artikel angemerkt, aber scheinbar sehr nah beieinander.

Angel4585 4. Aug 2011 08:10

AW: SVN richtig verwenden?
 
Oh man wenn man SVN jetz ne Weile benutzt und das Konzept dahinter halbwegs verstanden hat fängt man bei Mercurial irgendwie trotzdem wieder bei 0 an :(

Bei SVN mach ich vom Repository(gibt nur eins) ein Checkout und arbeite dann wie gewohnt an meinem Code.

Bei Mercurial gibts ja nicht nur ein Repository quasi auf dem Server sondern auf jedem Client nochmal eins.
Und wenn ich das recht verstehe arbeitet man immer direkt im Repository aufm Client, was bei svn ja nicht geht :gruebel: man man man
Und wenn man mit seinen Änderungen durch ist, committet man in die lokale Kopie und synchronisiert danach die Repositories.

Besonders schön find ich auf jedenfall die grafische Darstellung :)

Und bei Mercurial hat man immer die aktuellen Codedateien da was bei Subversion nicht der Fall ist da das rein auf ner Art Datenbank basiert, seh ich das richtig?
Wobei die Änderungen bei Mercurial denk ich auch in ner Datenbank gespeichert werden, alles andere macht eig kein Sinn.

Naja ich danke euch auf jedenfall für die Tipps und Links, werd mich da mal noch tiefer einarbeiten.:thumb:

Phoenix 4. Aug 2011 08:17

AW: SVN richtig verwenden?
 
Im Prinzip ja. Bei SVN hast Du nur ein Repo, und auf ggf. mehreren Clients lokale Working-Copies, bei Mercurial kannst Du belibig viele Repositories klonen (und zwar immer mit kompletter historie).
Du trägst also immer eine Kopie des Repos (und ja, da liegt irgendeine DB hintendran) mit Dir rum und kannst sie beliebig oft mit den anderen Repos in beliebige Richtungen synchronisieren.

Lemmy 4. Aug 2011 08:22

AW: SVN richtig verwenden?
 
Noch was zu SVN vs. Mercurial:

Ich nutze SVN - insbesondere deshalb recht gerne weil ich hier den Vorteil habe, dass mein Repro auf einem Server liegt - d.h. mit der Versionsverwaltung habe ich gleichzeitig ein Backup meines Codes. Bei Mercurial wären, wenn ich die selbe Systematik möchte schon 2 Checkins (oder puts) notwendig: einen ins lokale Repro und einen ins zentrale.

Und auch noch das: Sollte ich mal wieder mit mehreren an einem Projekt arbeiten müssen würde ich Mercurial auf jeden Fall den Vorzug geben - denn SVN und Mergen ist eine Geschichte für sich...

Grüße

Angel4585 4. Aug 2011 10:52

AW: SVN richtig verwenden?
 
Wie macht man das eigentlich wenn man externe Bibliotheken hat? kommen die mit in die Versionsverwaltung oder wird das irgendwie ausserhalb davon verwaltet? Also seien es jetzt DLLs die mit ausgeliefert weden oder in Java jars die ins Projekt eingebunden werden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz