Programmplanung. Blueprint. Wie geht ihr vor? Hilfsmittel?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dauerbaustelle hat geschrieben:Und es hat so ein Compare-Feature -- die Differenz zwischen einem Branch und einem anderen oder einem Fork und dem Parent anzuzeigen. Das hatte Bitbucket zumindest als ich da war noch nicht.
Hat Bitbucket mittlerweile, aber reichtlich versteckt hinter den `<<` im Overview.

Bitbucket hat die guenstigeren pauschalen Angebote (1 GB frei etc.), aber afaik ist Github da gegenueber OSS auch sehr grosszuegig.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab festgestellt, das ich bei bitbucket und github eh einen account schon habe :)

Nun habe ich bei github ein paar subversion repos importiert: http://github.com/jedie

Wie der import funktioniert steht bei http://github.com/guides/import-from-subversion bzw. http://github.com/blog/156-subversion-importing

Ein Git Eclipse Plugin howto kann man hier "sehen": http://github.com/guides/using-the-egit ... ith-github

Alles in allem macht das ganze einen netten Eindruck.

EDIT: Ach und schön ist, das man das git repo von github auch per svn nutzten kann, wenn man möchte, siehe: http://github.com/blog/626-announcing-svn-support
Zuletzt geändert von jens am Montag 19. April 2010, 12:16, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens: Der Issue-Tracker von BitBucket ist relativ klassisch, mit den üblichen Metadaten wie Milestones, Versionen, Komponenten, Typen, etc. GitHub bricht das alles nach bester Web-2.0 auf Labels herunter. Ich persönlich halte den Issue Tracker von GitHub daher für ziemlich unbrauchbar, v.a. für größere Projekte.

Die Verlinkung zwischen Changesets und Issues funktioniert bei BitBucket besser. Bei BitBucket kann man über den Commit-Kommentar Issues erneut öffnen, schließen und auch einfach darauf verweisen, und das auf verschiedenste Arten. GitHub dagegen kann gerade mal so Issues schließen.

In der Änderungsansicht von GitHub sind die Änderungen einfach nur linear aufgeführt, BitBucket dagegen zeigt zusätzlich noch einen hilfreichen Verzweigungsgraphen an.

GitHub dagegen hat ein sehr sinnvolles und umfangreiches Kommentarfeature, man kann Kommentare zu Changesets insgesamt oder zu einzelnen Zeilen verfassen, und hat damit schon ein vernünftiges Code-Review-System.

Darüber hinaus hat GitHub viele hübsche, aber im Allgemeinen (imho) ziemlich überflüssige Social-Features, inkl. hübscher Graphen, wer wann was wo commited hat. Dazu kommen noch ein paar andere überflüssige Features wie z.B. eine Subversion-Anbindung.

BitBucket hat zur Zeit ein paar Skalierungs- und Performance-Probleme, aber das wird sich mit der Zeit wohl wieder geben.

Im Allgemeinen scheint sich BitBucket auf die Kernfunktionalität zu konzentrieren, während GitHub vor allem mit dem drum herum beschäftigt ist. Mich stört das vor allem, ich finde BitBucket besser.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Wow, bin jetzt echt beeindruckt, was ich bis hierher schon alles über Versionskontrolle gelesen habe. Einiges noch nicht verstanden, aber doch einen kleinen Überblick gewonnen! Danke dafür!!

Jetzt muss ich Euch Experten als kleiner unwissender Hobbyprogrammierer aber doch nochmal auf den Boden runterholen: Ich arbeite hier an meinem Kalenderprogramm, das inzwischen schon etwas gewachsen ist und sicherlich noch um einiges wachsen wird. Was ich mache ist (leider) eine One-Man-Show. Ich denke mal, ein verteiltes System wie Mercurial wäre in meinem Fall sicherlich sinnvoller als ein zentrales. Allerdings habe ich noch keine wirkliche Antwort auf die Frage: Welchen Vorteil (außer das sehr komfortable Rückgängigmachen von Änderungen) bringt mir eine Versionskontrolle?

Vielleicht könnte mir der eine oder andere da 'nen Fingerzeig geben...

Gruß
mutetella
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mutetella hat geschrieben:Welchen Vorteil (außer das sehr komfortable Rückgängigmachen von Änderungen) bringt mir eine Versionskontrolle?
Einfache Backups und Publikation (wichtig auch wenn man ggf. andere Entwickler einbinden will aber auch sonst nicht unnütz), Rückverfolgung von Änderungen, ermöglich über Branching das Arbeiten an verschiedenen Entwicklungszweigen (angenommen du hast eine tolle Idee für den Kalender und willst sie mal eben ausprobieren, hackst dann daran in einem Zweig um in deiner Ursprungsversion nichts kaputt zu machen) wo du dir danach bequem die Änderungen anzeigen lassen kannst und sie dann eventuell mergen kannst. Dann hast du noch die Möglichkeit mit Tags eine bestimmte Version der Software zu markieren, etwa so wie Bookmarks, so dass du jederzeit zu dieser Version zurückkehren kannst. Wie zu alten Releases.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Du kannst auch gleichzeitig verschiedenene Ideen mit Branches verfolgen (leider ist Mercurial da IMO nicht sonderlich dafuer geeignet), sollte das Projekt wachsen, kannst du andere Leute leicht in die Infrastruktur einbinden, Zugriff auf alte Versionen zu haben, sollte man aber auf keinen Fall unterschaetzen.

Fuer mich persoenlich hilft mir das nutzen einer VCS produktiv zu bleiben und nicht abzuschweifen, ausserdem kann man den Fortschritt so sehr gut abschaetzen (zumindest in einer motivierenden Art und Weise).

Wenn es zu einer Spaltung in stable/unstable kommt und du den stable-Zweig mit Bugfixes versorgen willst (die aber gleichzeitig auch fuer unstable relevant sind), ist es IMO komplett aus, wenn man kein VCS nutzt.
Zuletzt geändert von cofi am Dienstag 20. April 2010, 08:47, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mutetella hat geschrieben:Allerdings habe ich noch keine wirkliche Antwort auf die Frage: Welchen Vorteil (außer das sehr komfortable Rückgängigmachen von Änderungen) bringt mir eine Versionskontrolle?
Reicht Dir das denn nicht? ;-)

Branching ist z.B. sicherlich eine nette Sache; Du kannst so neben der reinen Hauptentwicklung z.B. mit neuen Technologien rumspielen, ohne dass das komplette restliche Projekt so lange nicht funktioniert, bis die neue Technologie funktioniert oder wieder verworfen wurde. (Z.B. Datenbank-Backend einbauen o.ä.)

Hinzu kommt das Tagging. Sobald Du eine Version erreicht hast, die stabil (gut genug) läuft, kannst Du sie z.B. eben speziell als "lauffähige Version" taggen und so auch in der Zeit, in der Du die Software weiterentwickelst anderen zur Verfügung stellen oder auf anderen Rechnern von Dir installieren.

Auch mag es sein, dass Du nicht immer auf genau einem rechner arbeitest. Ich habe zu Hause einen, in der Uni auch und dann noch ein Laptop. Dort will ich ja immer eine aktuelle Version meines Quellcodes besitzen. Ohne Versionsverwaltung müßte ich ständig Archive manuell als aktuell erkennen und dann kopieren. Geht mit einem Versionsverwaltungssystem viel einfacher.

Ich denke die Liste kann man noch beliebig fortsetzen... vieles kommt natürlich erst dann ins Spiel, wenn andere an einem Projekt mitarbeiten und das ganze zum Teamwork wird - man könnte natürlich auch durchaus ketzerisch sagen, dass es ohne Versionskontrolle heutzutage idR. nie dazu kommen wird... ;-)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Also die Arbeit an verschiedenen Entwicklungszweigen wäre für mich ja echt ein großer Vorteil, an den Punkt komme ich immer wieder, dass ich zum Rumtesten meinen Kalender in ein eigenes Verzeichnis kopiere und die Änderungen, sollten sie sich bewähren, wieder per Hand zurückübertrage... Aber folgendes kann ich mir konkret nicht vorstellen:
Ich stehe gerade vor dem Problem, dass ich in der Klasse, die für die Kalenderansichten zuständig ist, die __init__-Methode "aufräumen" muss, weil da einfach keine klare Struktur mehr drin ist. Wenn ich das in einem separaten Branch mache und parallel dazu an dieser Klasse weiterarbeite und dabei eventuell auch das eine oder andere an der __init__-Methode ändere... Was geschieht dann, wenn ich den "Aufräumzweig" und den "Weitergemachtzweig" zusammenführe? Im "Aufräumzweig" sind mit Sicherheit Änderungen in der __init__-Methode passiert, im "Weitergemachtzweig" potenziell auch.

@cofi:
Weshalb meinst Du, dass Mercurial für die Arbeit mit Branches nicht sonderlich geeignet ist?

Gruß
mutetella
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Leonidas hat geschrieben:
mutetella hat geschrieben:Welchen Vorteil (außer das sehr komfortable Rückgängigmachen von Änderungen) bringt mir eine Versionskontrolle?
Einfache Backups und Publikation (wichtig auch wenn man ggf. andere Entwickler einbinden will aber auch sonst nicht unnütz), Rückverfolgung von Änderungen, ermöglich über Branching das Arbeiten an verschiedenen Entwicklungszweigen (angenommen du hast eine tolle Idee für den Kalender und willst sie mal eben ausprobieren, hackst dann daran in einem Zweig um in deiner Ursprungsversion nichts kaputt zu machen) wo du dir danach bequem die Änderungen anzeigen lassen kannst und sie dann eventuell mergen kannst. Dann hast du noch die Möglichkeit mit Tags eine bestimmte Version der Software zu markieren, etwa so wie Bookmarks, so dass du jederzeit zu dieser Version zurückkehren kannst. Wie zu alten Releases.
Um das noch mal herauszustreichen: Man kann nicht nur jederzeit wieder zu einem alten Stand zurückkehren, sondern man kann sich auch sehr bequem die Änderungen zwischen zwei (nicht notwendigerweise benachbarten) Ständen anzeigen lassen. Das kann manchmal sehr praktisch sein.

Ich hatte mal die Situation, daß ich in einem Projekt auf ein Problem stieß, und da einfach nicht weiterkam. Dann erinnerte ich mich, daß ich ein vergleichbares Problem in einem anderen Projekt schon mal gehabt hatte, und ich es damals irgendwie gelöst hatte. Also habe ich mir das Repository des anderen Projekts vorgenommen und nach dem entsprechenden Changeset gesucht. Anschließend ein 'hg diff' und ich hatte meine Lösung.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

mutetella hat geschrieben:Also die Arbeit an verschiedenen Entwicklungszweigen wäre für mich ja echt ein großer Vorteil, an den Punkt komme ich immer wieder, dass ich zum Rumtesten meinen Kalender in ein eigenes Verzeichnis kopiere und die Änderungen, sollten sie sich bewähren, wieder per Hand zurückübertrage... Aber folgendes kann ich mir konkret nicht vorstellen:
Ich stehe gerade vor dem Problem, dass ich in der Klasse, die für die Kalenderansichten zuständig ist, die __init__-Methode "aufräumen" muss, weil da einfach keine klare Struktur mehr drin ist. Wenn ich das in einem separaten Branch mache und parallel dazu an dieser Klasse weiterarbeite und dabei eventuell auch das eine oder andere an der __init__-Methode ändere... Was geschieht dann, wenn ich den "Aufräumzweig" und den "Weitergemachtzweig" zusammenführe? Im "Aufräumzweig" sind mit Sicherheit Änderungen in der __init__-Methode passiert, im "Weitergemachtzweig" potenziell auch.
Mercurial erkennt diesen Konflikt und fordert dich auf, zu entscheiden, welche Änderungen du haben willst. Idealerweise hast du vorher ein Diff-Programm (vimdiff oder ähnliches) konfiguriert, das dann gestartet wird und dir beide Dateien nebeneinander anzeigt.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

mutetella hat geschrieben:Ich stehe gerade vor dem Problem, dass ich in der Klasse, die für die Kalenderansichten zuständig ist, die __init__-Methode "aufräumen" muss, weil da einfach keine klare Struktur mehr drin ist. Wenn ich das in einem separaten Branch mache und parallel dazu an dieser Klasse weiterarbeite und dabei eventuell auch das eine oder andere an der __init__-Methode ändere... Was geschieht dann, wenn ich den "Aufräumzweig" und den "Weitergemachtzweig" zusammenführe? Im "Aufräumzweig" sind mit Sicherheit Änderungen in der __init__-Methode passiert, im "Weitergemachtzweig" potenziell auch.
Das konkrete Problem würde ich eher klassisch angehen: Du änderst die gleiche Methode einfach nicht in verschiedenen Branches.
Auch in Teams ist eine Absprache, wer an welchem Teil des Programms rumdoktort extrem hilfreich. Natürlich kann man das auch mergen und Konflikte beheben, aber ein wenig Brain hilft dabei, solche Situationen einfach zu vermeiden.
lunar

mutetella hat geschrieben:@cofi:
Weshalb meinst Du, dass Mercurial für die Arbeit mit Branches nicht sonderlich geeignet ist?
Das würde mich auch interessieren. Mit einfachen Feature-Branches hatte ich mit aktuellen Mercurial-Versionen nie Probleme.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

lunar hat geschrieben:
mutetella hat geschrieben:@cofi:
Weshalb meinst Du, dass Mercurial für die Arbeit mit Branches nicht sonderlich geeignet ist?
Das würde mich auch interessieren. Mit einfachen Feature-Branches hatte ich mit aktuellen Mercurial-Versionen nie Probleme.
Eventuell uebersehe ich etwas, aber `cherry-pick` und `rebase` misse ich schon sehr.
lunar

@cofi: Ich denke, Du übersiehst wirklich etwas, hg transplant und hg rebase existieren. Die dazu nötigen Erweiterungen sind bei Mercurial dabei.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@lunar: Danke, die schau ich mir gleich an.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, ich hab' mich jetzt für Mercurial entschieden....

Nachdem ich bisher noch überhaupt nicht mit einer Versionskontrolle gearbeitet habe, hätte ich noch ein paar Verständnisfragen:

1. Mit 'hg branch' wird meine Arbeitskopie als Zweig markiert. Mit 'hg clone' erstelle ich einen Klon/eine Kopie des gesamten oder eines speziellen Repository. Ich verstehe den Unterschied nicht wirklich. Ohne jetzt eine haargenaue Anleitung zu benötigen, aber wie gehe ich denn vor, wenn ich vom aktuellen Stand aus einen Zweig eröffnen möchte?

2. Ich habe gerold's Vorschlag übernommen und mir Trac installiert. Um Programmfeatures zu definieren und diese dann Versionen und Komponenten zuzuordnen ist das eine prima Sache. Auch kann ich mir vorstellen, künftig nicht mehr so schnell den Faden zu verlieren, wenn man mal etwas länger nicht mehr bei der Sache war... Für Trac gibt es ja auch eine Mercurial-Unterstützung. Wie kann ich mir das konkret vorstellen, wenn ich z. B. ein Ticket abarbeite: An welcher Stelle kommt hier Mercurial ins Spiel? Wenn ich das Ticket erledigt habe, d. h. neue Programmfeatures fertiggestellt sind, dann mache ich in Mercurial einen commit und in Trac wird das Ticket als erledigt gekennzeichnet. Weshalb muss da eine Verbindung zwischen Trac und Mercurial bestehen?

3. Ähnlich mit der VIM-Unterstützung: Welchen Vorteil hat eine solche Verzahnung zwischen Editor und Mercurial?

Danke schon mal für Eure Unterstützung!!

Gruß
mutetella
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

mutetella hat geschrieben:Ok, ich hab' mich jetzt für Mercurial entschieden....

Nachdem ich bisher noch überhaupt nicht mit einer Versionskontrolle gearbeitet habe, hätte ich noch ein paar Verständnisfragen:

1. Mit 'hg branch' wird meine Arbeitskopie als Zweig markiert. Mit 'hg clone' erstelle ich einen Klon/eine Kopie des gesamten oder eines speziellen Repository. Ich verstehe den Unterschied nicht wirklich. Ohne jetzt eine haargenaue Anleitung zu benötigen, aber wie gehe ich denn vor, wenn ich vom aktuellen Stand aus einen Zweig eröffnen möchte?

2. Ich habe gerold's Vorschlag übernommen und mir Trac installiert. Um Programmfeatures zu definieren und diese dann Versionen und Komponenten zuzuordnen ist das eine prima Sache. Auch kann ich mir vorstellen, künftig nicht mehr so schnell den Faden zu verlieren, wenn man mal etwas länger nicht mehr bei der Sache war... Für Trac gibt es ja auch eine Mercurial-Unterstützung. Wie kann ich mir das konkret vorstellen, wenn ich z. B. ein Ticket abarbeite: An welcher Stelle kommt hier Mercurial ins Spiel? Wenn ich das Ticket erledigt habe, d. h. neue Programmfeatures fertiggestellt sind, dann mache ich in Mercurial einen commit und in Trac wird das Ticket als erledigt gekennzeichnet. Weshalb muss da eine Verbindung zwischen Trac und Mercurial bestehen?

3. Ähnlich mit der VIM-Unterstützung: Welchen Vorteil hat eine solche Verzahnung zwischen Editor und Mercurial?

Danke schon mal für Eure Unterstützung!!

Gruß
mutetella
ad 1) Ich arbeite eigentlich immer mit 'hg clone'. Das andere brauchst du nur, wenn du Zweige im *selben* Verzeichnis verwalten willst. Ansonsten halte ich die Zweige einfach auch räumlich auseinander - ist auf Dauer eindeutiger.

ad 2) Von Hause aus mußt du nach einem Commit die Tickets manuell schließen. Es gibt auch Trigger, die dir das abnehmen wenn im Text eines Commits ein Hinweis auf die zu schließenden Tickets enthalten ist, aber ich war bislang zu faul, mir sowas einzurichten. Trac ist einfach als Informationszentrum interessant: Du hast deine Tickets, quasi als Aktionsliste, die du dir nach verschiedenen Kriterien sortieren und filtern lassen kannst. Wichtige Hinweise, Dokumentation kommen ins Wiki. Es ist alles an einem Ort. Die Verknüpfung mit Mercurial ist da einfach "konsequent weitergedacht": Der Code der aktuellen Hauptlinie ist dann halt auch in Trac sichtbar, und man kann leicht Bezug auf ihn nehmen, in dem man z.B. eine Revisionsnummer im Text verwendet. Diese funktioniert dann als Link zum entsprechenden Code.

ad 3) Das Vim-Plugin macht Mercurial einfach "leichter" erreichbar in dem es die Befehle in das Menu integriert. Da ich sowieso immer ein Terminal-Fenster daneben offen habe, brauche und verwende ich es nicht.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Das andere brauchst du nur, wenn du Zweige im *selben* Verzeichnis verwalten willst. Ansonsten halte ich die Zweige einfach auch räumlich auseinander
Ist damit aber nicht der Vorteil einer Versionskontrolle, Dateien/Verzeichnisse nicht doppelt anlegen zu müssen, vergeudet?
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

mutetella hat geschrieben:
Das andere brauchst du nur, wenn du Zweige im *selben* Verzeichnis verwalten willst. Ansonsten halte ich die Zweige einfach auch räumlich auseinander
Ist damit aber nicht der Vorteil einer Versionskontrolle, Dateien/Verzeichnisse nicht doppelt anlegen zu müssen, vergeudet?
Nein. Du hast ja nur ein Verzeichnis für jeden Zweig, nicht für jede Version. Um das mal zu illustrieren: Ich habe ein Projekt, das ich an die Bedürfnisse verschiedener Kunden angepaßt habe. Die Grundfunktionalität ist zwar die gleiche, aber es gibt halt kleinere Unterschiede. Die Zahl der Commits, d.h. der sicherungswerten Zwischenstände geht in die Hunderte. Ohne Versionsverwaltung würde ich tatsächlich von jedem dieser Zwischenstände eine komplette Sicherungskopie machen. Bzw. nur noch von einigen ausgewählten. Wodurch aber auch die Möglichkeit verloren geht, sehr kleine Veränderungen zu bewahren. So habe ich für jeden Kunden ein vom Hauptrepo abgeleitetes Repository und durch die Versionsverwaltung auch die Möglichkeit, Änderungen, die alle Zweige betreffen, ohne großen Aufwand von einem Zweig auf die anderen zu verteilen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, prinzipiell klar, nur, muss nicht jeder Zweig, um testbar zu bleiben, den kompletten Inhalt eines Programmes beinhalten? Zudem 'hg clone' ja auch die komplette Version eines Repository's kopiert. Konkret: Wenn ich ein Arbeitsverzeichnis mit 'a.py', 'b.py' und 'c.py' habe und darauf basierend einen Zweig mit 'hg clone' eröffne, erhalte ich wieder ein Arbeitsverzeichnis mit den 3 Dateien. Um in Deinem Bereich zu bleiben: Wenn Du für 5 Kunden 5 variierende Programme pflegst, dann beinhalten die 5 Zweige doch immer auch alle Dateien des Hauptprogrammes, selbst wenn Du bei einem Kunden z. B. nur Änderungen an 'b.py' vornimmst. Oder steh' ich jetzt total auf der Leitung...?
Antworten