Autor Beitrag
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Fr 13.10.06 14:32 
Hi,

setze seit Jahren Subversion ein. Nun bin ich in die Verlegenheit gekommen mit mehreren Entwicklern an einem Projekt zu arbeiten. Ich habe jedem einen Entwicklungszweig angelegt (branches). Beim Zusammenspielen habe ich mir dann die Änderungen aus dem Hauptzweig in einen einzelnen Entwicklungszweig geholt. Die Folge war, dass ich natürlch auch im Entwicklungszweig dann die einzenlen branches hatte. Bei einigen hundert Units wird das Zusammenspielen aber dann auch zum Gedultsspiel, denn beim übernehmen der Änderungen in den Hauptzweig werden in einem branch wieder alle branches angelegt:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
-Projekt
  |-branches
       |-branch1
       |-branch2
           |-branches
               |-branch1
               |-branch2


Das kann es doch aber nicht sein! Bei jedem neuen Zweig würde sich der Inhalt des Repositories ja verdoppeln ohne Sinn und Zweck! Selbst wenn ich einen branch dann irgend wann schließe bleiben die Daten im Archiv und müssen immer mitgesichert werden....

Wer kann mir helfen???

Grüße
Lemmy
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Fr 13.10.06 15:53 
Zitat:
setze seit Jahren Subversion ein

Dann wird es jetzt wohl mal Zeit einen Blick in die Doku zu werfen :P

Erstmal erscheint es mir recht sinnlos, daß jeder Entwickler seinen eigenen Branch bekommt. Aber gut, das soll nicht das Problem sein. (oder doch?!)

Deine Verzeichnisstruktur hingegen ist etwas unglücklich. Üblicherweise sieht der Aufbau folgendermaßen aus (siehe svn Doku)

ausblenden Quelltext
1:
2:
3:
4:
- repository
  - tags
  - branches
  - trunk


Trunk ist der Entwicklungszweig. Von diesem können unter tags und branches Kopien erstellt werden, die dann den Status von Trunk zu einem bestimmten Zeitpunkt (eben der Zeitpunkt des Kopierens) repräsentieren.

Zitat:
Ich habe jedem einen Entwicklungszweig angelegt (branches)

Ein branch ist eben kein Entwicklungszweig sondern eben ein "Zweig", der zu einem bestimmten Zeitpunkt vom Entwickluns"stamm" abgespalten wurde. Der "Stamm" also "trunk" oder "HEAD" ist der Entwicklunsgzweig.

Zitat:
Beim Zusammenspielen habe ich mir dann die Änderungen aus dem Hauptzweig in einen einzelnen Entwicklungszweig geholt.

Der Hauptzweig ist der Entwicklunsgzweig.

Ich würde die grundsätzliche Arbeitsweise überdenken. Imho gibt es keinen Grund jedem Entwickler seinen eigenen Zweig zu geben und die Änderungen aus diesen auf einem vereinen zu wollen. Dann kannst Du dir die Änderungen auch per Mail schicken lassen.
Der Sinn an der Codeverwaltung liegt ja eben genau dadrin, mehreren Benutzern ein gleichzeitiges Arbeiten auf einem Quellcodestand zu ermöglichen.

Nichts für Ungut!

Bis neulich ...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 13.10.06 17:49 
Erstmal gebe ich meinem Vorredner hier Recht, wöllte aber noch ein paar Dinge dzu ergänzen ...

Und zwar folgende: Wie user profile iconGrendel bereits sagte, ist /trunk der Entwicklungszweig, auf den jegliche Änderungen angewand werden sollen. Dieser kann gleichzeitig von jeglichen Benutzern genutzt werden, ohne dass es dabei Probleme gibt. Daher muss man sich ja auch von SVN vor dem Committen eine aktualle Arbeitskopie holen aus der man jegliche Konflikte mittels eines Diff-Programms (entweder dem integrierten von TortoiseSVN oder WinMerge) entfernen kann.

Sollte es nun wirklich einmal so sein, dass ein Entwickler ein Feature implementieren soll, welches eine recht große Änderung am Grundsystem des Programmes darstellt, so kann diese mittels eines Branches vom Hauptzweig getrennt erfolgen, um die eigentliche Hauptentwicklungsarbeit nicht weiter zu stören. Die Änderungen in diesem Branch können nun nach Fertigstellung der Umbauarbeiten mit einem Schlag zurückgespielt und eingebunden werden --> Große Features können recht schnell eingebettet werden, ohne die Arbeit zu stören.

Daher ist es nicht sinnvoll, jedem Entwickler einen eigenen Branch zu geben, da dies häufig nur zu sehr viel Problemen bei der Verwaltung führt ... Eben wie das zuschicken der Sources per Email ist.

Als Letztes wie gesagt bleiben einem immer noch die Tags ... Ih, was das? Ganz einfach. Diese kannst Du immer dann erstellen, wenn Du der Meinung bist, dass dein Programm jetzt stable läuft und du den Kunden Alpha-Testen lassen möchtest - also eine neue marktreife Version fertig ist, an der nichts mehr geändert werden brauch und die später als Referenz dienen kann.

Insgesamt also: RTFM ;-)

P.S.: Ich richte derzeit einen SVN-Server für meine Hochschule her, da muss man das System mindestens soweit auch verstanden haben - selbst wenn ich das mit dem Zusammenführen von Branches bisher noch nicht erfolgreich hinbekommen hab (ohne das Repo dabei zu erden).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Lemmy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Fr 13.10.06 18:52 
Hi,

also RTFM habe ich gemacht, nur habe ich dort einen kleinen Begriff überlesen, der mich in Teufels Küche führte.

Grundsätzlich: Ich habe den von Subversion vorgeschlagenen Aufbau angewandt, sorry dass das nicht korrekt rüber gekommen ist.

Wenn Ihr beiden mal RTFM machen würdet ;-))) dann könntet Ihr dort lesen, dass es 3 verschiedene Arten von Branches-Anhängern gibt (svn.collab.net/repos...-best-practices.html ziemlich am Ende der Seite):

1. keine Branches
2. bei Bedarf Branches
3. immer Branches

Aber das ist jetzt hier nicht unser Thema!

Fakt ist, dass ich vom kompletten Repository einen Branch angelegt habe und nicht nur vom Trunk. Damit habe ich dann eben erreicht, dass beim späteren Abgleich der Zweige mit dem "Trunk" jeder Branch noch die anderen Branches als Zweig erhalten hat was letztenendes zu einer Vervielfachung der Dateien geführt hat.

Ich werde das in Zukunft auch richtig machen (d.h. nur noch vom trunk einen branch) und habe dann auch kein Problem mit mehreren Strängen. Momentan sehe ich keine andere Lösung, da wir noch in der Implementierung der ersten Version sind, also noch mächtig an der Funktionalität feilen.

Danke für den Beistand!
Lemmy