Forum: PC Hard- und Software Versionsverwaltung best practice?


von Erwin M. (nobodyy)


Lesenswert?

Ich suche Best Practice Richtlinien für Versionsverwaltung, denn in der 
Firma gibt es Kollegen, insbesondere einige die nicht programmieren 
können, die meinen da gehören nur freigegebene Versionen hin - was 
bedeuten würde das ungefähr einmal alle 3 Jahre Checkin gemacht würde, 
von um 3 Programmierern, die am gleichen Sourcecode arbeiten.
Ich mache aber ein Checkin täglich wenn ich an einem Tag stundenlang 
programmiert habe, damit ich nicht hunderte lokale Kopien verwalten muss 
und auch per Rechtsklick verschiedene Versionen von Dateien vergleichen 
kann.
Das bedeutet natürlich auch beim Mergen verschiedener Zweige einige 
Zwischenstände, mit denen man kein Build machen kann, aus denen also 
keine ausführbare Software gemacht werden kann. Aber das beeinträchtigt 
ja nicht die lauffähigen Versionen, die zudem in dem Log klar 
beschrieben sind und da hier nur die Entwickler selbst die Software 
machen, gibt es keine Anforderung wie ein Nightly Build, so das es da 
kein Problem gibt.

Bisher finde ich zu dem Thema praktisch nichts, keine Quellen die 
erläutern würden das Versionsverwaltung mehr als nur das Ablegen von 
freigegebenen Versionen ist, mehr als nur Archivierung.
Wo findet man sowas?

von Rene H. (Gast)


Lesenswert?

Welches Repo? Git? Svn?

von Marcel (Gast)


Lesenswert?

Kommt ja auch auf den persönlichen Geschmack an. Wenn ich dran 
denke/nicht zu faul bin und es sinn macht, geht bald jede Zeile in ein 
commit auf. Grade wenn man mit mindestens zu zweit an einer Sache 
arbeitet und bestehen Code ändert, ist man dafür schnell dankbar.

von Frank (Gast)


Lesenswert?

Bei und werden per TFS sowohl die Anforderungen als auch die 
Tätigkeiten/Arbeitsaufwände verwaltet.
Zu den meisten Aufgabe gehört Code oder Doku der eingecheckt wird und 
dann mit der jeweiligen Aufgabe verlinkt wird.
Sprich, man checkt deutlich öfter als 5 mal am Tag ein.

von Dirk D. (dicky_d)


Lesenswert?

Ohne da jetzt auf Literatur verweisen zu können, ich hab das in 
verschiedenen Firmen und unterschiedlichen Projekten überall gleich 
kennengelernt (ich hab aber praktisch nur git Erfahrung):

Machst du eine kleine Änderung, nen kleinen Bugfix oder so, dann machst 
du das, committest das und pusht das.

Machst du größere Änderungen branchst du vorher, commitest jedes 
"Häppchen" das du gesonder betrachten und einzeln fertig stellen kannst.
Du Mergest dabei regelmässig den Aktuellen Funktionierenden Stand in 
dein Entwicklungszweig.
Bist du Fertig Mergst du zurück.

Wenn möglich Baut das Buildsystem alles was du pusht, und meldet sich 
bei dir wenn's kaputt geht.

Um Releases zu Markieren gibt es Tags.
Schreibt man gute Commit-Messages kann man seine Changelog zum Release 
einfach auf der commit-log generieren.

Ob das das Gelbste vom ei ist oder nicht, da kann man gerne, lange und 
Ausgiebig drüber streiten.
Sicher ist aber: einzelne Änderungen gehören einzeln verpackt unter 
Versionskontrolle.

Wenn du eher sowas wie ein Leitfaden sucht les dich ggf. mal in git flow 
ein.
Das ist für die meisten zwar Overkill, aber da kann man einfach das 
rausstreichen was man nicht braucht, das was über bleibst ist sicherlich 
nicht schlecht.

von JJ (Gast)


Lesenswert?

Für git gibt es einen sehr guten Guide von Atlassian:
https://www.atlassian.com/git/tutorials/comparing-workflows

Es wird besonders herausgestellt, dass Versionsmanagement mehr ist als 
regelmäßige Sicherungskopien.

Es gibt noch ein ähnliches Dokument für SVN, aber das finde ich gerade 
nicht.

von Erwin M. (nobodyy)


Lesenswert?

Rene H. schrieb:
> Welches Repo? Git? Svn?

Das ist nebensächlich.
Man braucht es beipielsweise wenn ein Fehler X bei auftritt, um 
nachzusehen ob es bei der ältesten Version auftrat und wenn nicht, durch 
Intervallhalbierung effizient festzustellen zwischen welchen zwei 
Versionen der Fehler hinein kam. Durch Vergleichen kann man die Ursache 
meist schnell einkreisen und lokalisieren sowie beseitigen.
Das funktioniert natürlich nur wenn man mindestens einmal täglich ein 
Checkin macht und nicht nur alle 3 Jahre.
Das ist aber nicht-Programmierern nur schwer vermittelbar.

von Mark B. (markbrandis)


Lesenswert?

Erwin M. schrieb:
> und da hier nur die Entwickler selbst die Software machen, gibt es keine
> Anforderung wie ein Nightly Build

Was hat das eine mit dem anderen zu tun? Nightly Builds sind generell 
sinnvoll.

Auch gute Leute machen manchmal Fehler. "Oh, ich muss in einer 
Viertelstunde meine Tochter vom Kindergarten abholen. Naja dann committe 
ich jetzt schnell noch, zum Testen ist dann keine Zeit mehr heute aber 
wird schon passen." Und prompt auf die Schnauze gefallen.

: Bearbeitet durch User
von physiker (Gast)


Lesenswert?

Erwin M. schrieb:
> Ich suche Best Practice Richtlinien für Versionsverwaltung, denn in der
> Firma gibt es Kollegen, insbesondere einige die nicht programmieren
> können, die meinen da gehören nur freigegebene Versionen hin - was
> bedeuten würde das ungefähr einmal alle 3 Jahre Checkin gemacht würde,
> von um 3 Programmierern, die am gleichen Sourcecode arbeiten.

Also, es wurde im thread schon einiges zu besseren Verfahrensweisen 
gesagt, aber nur mal interessehalber, da sich das oben geschilderte nach 
dem größtmöglichen Unfall anhört: Wie verwalten die Leute momentan ihre 
Entwicklung "lokal"? Jeder mit seinem eigenen Repo oder womöglich gar 
nicht? Und wie und wann wird gemerged? Nach 3 Jahren, nachdem sich der 
Code komplett auseinander entwickelt hat? Gruselige Vorstellung.

von physiker (Gast)


Lesenswert?

Erwin M. schrieb:
> Das bedeutet natürlich auch beim Mergen verschiedener Zweige einige
> Zwischenstände, mit denen man kein Build machen kann, aus denen also
> keine ausführbare Software gemacht werden kann. Aber das beeinträchtigt
> ja nicht die lauffähigen Versionen, die zudem in dem Log klar
> beschrieben sind und da hier nur die Entwickler selbst die Software
> machen, gibt es keine Anforderung wie ein Nightly Build, so das es da
> kein Problem gibt.

Oder, man hält sich einen main branch der immer kompilieren muss und 
alle automatischen tests besteht und einen Integrationsbranch, wo die 
Anforderungen ggf. etwas entspannter eingestellt sind, aber der 
regelmäßig in main einfließt.

von abc (Gast)


Lesenswert?

Erwin M. schrieb:
> Ich mache aber ein Checkin täglich wenn ich an einem Tag stundenlang
> programmiert habe, damit ich nicht hunderte lokale Kopien verwalten muss
> und auch per Rechtsklick verschiedene Versionen von Dateien vergleichen
> kann

Bei uns muss jede neue Funktion bzw. jeder Bugfix einen einzelnen, 
atomaren Commit besitzen. Dazu direkter Verweis auf das 
Incident-Management wo alles zentral geloggt ist.

Im Trunk muss IMMER eine lauffähige Funktion sein. Wenn das ein 
Entwickler verkackt, wird er geteert und gesteinigt. Das ist schon der 
Grund warum alle einen Brach für ihre aktuelle Entwicklungsarbeit 
nutzen.

Die Testabteilung bezieht ihre Testresultate immer auf die jeweilige 
GIT- bzw. SVN-Revision.

von WebDeveloper (Gast)


Lesenswert?

Vielleicht hilft da ja ein Blick in diese Zeitschrift zum Thema GIT, 
gerade rausgekommen:

http://www.webundmobile.de/update/internet/inhalt-aktuellen-ausgabe-1062941.html

Mit 15 Euro leider auch sehr teuer...

von Erwin M. (nobodyy)


Lesenswert?

physiker schrieb:
>
> Also, es wurde im thread schon einiges zu besseren Verfahrensweisen
> gesagt, aber nur mal interessehalber, da sich das oben geschilderte nach
> dem größtmöglichen Unfall anhört: Wie verwalten die Leute momentan ihre
> Entwicklung "lokal"? Jeder mit seinem eigenen Repo oder womöglich gar
> nicht? Und wie und wann wird gemerged? Nach 3 Jahren, nachdem sich der
> Code komplett auseinander entwickelt hat? Gruselige Vorstellung.

Ja, aber für Leute die keine Ahnung davon haben ist das nicht gruselig 
sondern irgendwie normal.

von Erwin M. (nobodyy)


Lesenswert?

physiker schrieb:
> Erwin M. schrieb:
>> Das bedeutet natürlich auch beim Mergen verschiedener Zweige einige
>> Zwischenstände, mit denen man kein Build machen kann, aus denen also
>> keine ausführbare Software gemacht werden kann. Aber das beeinträchtigt
>> ja nicht die lauffähigen Versionen, die zudem in dem Log klar
>> beschrieben sind und da hier nur die Entwickler selbst die Software
>> machen, gibt es keine Anforderung wie ein Nightly Build, so das es da
>> kein Problem gibt.
>
> Oder, man hält sich einen main branch der immer kompilieren muss und
> alle automatischen tests besteht und einen Integrationsbranch, wo die
> Anforderungen ggf. etwas entspannter eingestellt sind, aber der
> regelmäßig in main einfließt.

Das geht nicht, z. B. wenn im Branch zusächliche Inklude-Dateien sind, 
eine ganz andere Ablaufsteuerung verwendet wird oder inkonsistente 
Variablendeklarationen verwendet werden; da kann nicht mal etwas 
einfließen sondern da geht, ohne großen Aufwand, nur alles oder nichts 
zu mergen. Da hat man dann die Wahl den Branch auf dem letzten guten 
Stand zu lassen und in Main einzuarbeiten oder umgekehrt plus alles aus 
dem Branch in Main zu übernehmen.
Ich hatte das erste genommen, weil ich in der Zeit der einzige war, der 
an beiden Zweigen arbeitete und das hat gut funktioniert, aus dem Build 
vom Main alle der über 300 Warnmeldungen beseitigt.

: Bearbeitet durch User
von Mikro 7. (mikro77)


Lesenswert?

Für kleine Projekte (mit einer Handvoll Leute; geringer Compilezeit; 
schnellen Durchlauf der automatischen Test) ist es imho sinnvoll:

-- Ein Main branch, der immer kompilierbar ist und wo alle Tests 
durchlaufen müssen.

-- Auch hier wird die Main niemals direkt geändert (weil fehleranfällig) 
sondern aus einen Seitenbranch werden Änderungen konfliktfrei 
"propagiert" nachdem im Seitenbranch bereits die Integration (aus der 
Main) durchgeführt wurde (kompiliert, Tests laufen durch).

-- Jeder Projektbeteiligte hat einen privaten Seitenbranch (in den der 
eine vielleicht alle 10min eincheckt und der andere alle Woche einmal). 
Ob und wann ein Abgleich mit der Main vorgenommen wird, das kann sehr 
speziell sein. Ein VCS kann einiges, aber nicht solche Absprachen 
ersetzen (die in einem kleinen Team quasi auf Zuruf gehen sollten).

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Erwin M. schrieb:
> Ich suche Best Practice Richtlinien für Versionsverwaltung

Wenn man es Versionsverwaltung nennt, verwaltet es nur Versionen, also 
Software mit einer anderen Versionsnummer.

Darin befinden sich tunlichst Sourcen UND Compilerinstallation UND 
ausgelieferte EXE, denn die Theorie, man könne jederzeit aus dem 
Sourcenstand eine Version z.B. zum Debuggen wiederhersellen, ist Humbug, 
wenn sich zwischendrin die Compilerversion ändert.

Weil die Datenmengen recht gross sind, sollte man das nur für 
ausgelieferte Versionen machen, die jeweils eine andere Versionsnummer 
tragen und durch alle automatisierten Test (ISO9001, stelle sicher daß 
ein schon gefixter Fehler nicht mehr auftaucht) durchgelaufen ist. Weil 
das nicht bei jedem Build so ist, wird zwar vor dem Build eine 
Versionsnummer eingetragen, aber die gebuildete Version erst NACH 
erfolgreichem Build (auf allen Plattformen) und Tests mit dieser 
Versionsnummer eingecheckt. Auf die Art bekommt man auch wirklich mal 
eine Version 2.0 und nicht 2.0.0.5765 als erste ausgelieferte Fassung, 
vor allem kann schon vor dem Build die Doku mit den entsprechenden 
Versionsnummern versehen werden.

Was du meinst, ist nicht unbedingt die Versionsverwaltung, sondern bloss 
eine Sourcenverwaltung ggf. uncompilierter und ungetester Programme als 
Archiv und damit man Änderungen nachvollziehen kann und die mit anderen 
sharen kann. Die nervt um so mehr, um so mehr Arbeit es für den 
Programmierer ist, darin einzuchecken, es sollte also KEINERLEI Arbeit 
sein einzuchecken (auschecken kommt eher selten vor, das darf einen 
Handgriff erfordern). Es lohnt sich, wenn der Rechner einfach 
automatisch jeden Tag oder gar bei jedem speichern die lokalen Sourcen 
archiviert so dass man jederzeit später auf jeden alten Stand zugreifen 
kann, ohne eine Versionsnummer vergeben haben zu müssen, also nach 
Timestamp.

Im einfachsten Fall tut es ein zentrales Serververzeichnis, ansonsten 
ein Git-Zugriff in Eclipse oder Microsoft TFS, natürlich kann man auch 
die ausgelieferten Versionen mit demselben Tool verwalten, sollte aber 
eine andere Datenbank verwenden. Vorsicht vor CVS, das kommt mit 
Gross-/Kleinschreibung nicht zurecht.

von Podcastfan (Gast)


Lesenswert?

Schon ein paar Jahre alt, noch immer hörenswert:

http://cre.fm/cre130-verteilte-versionskontrollsysteme

von Mark B. (markbrandis)


Lesenswert?

Erwin M. schrieb:
> physiker schrieb:
>>
>> Also, es wurde im thread schon einiges zu besseren Verfahrensweisen
>> gesagt, aber nur mal interessehalber, da sich das oben geschilderte nach
>> dem größtmöglichen Unfall anhört: Wie verwalten die Leute momentan ihre
>> Entwicklung "lokal"? Jeder mit seinem eigenen Repo oder womöglich gar
>> nicht? Und wie und wann wird gemerged? Nach 3 Jahren, nachdem sich der
>> Code komplett auseinander entwickelt hat? Gruselige Vorstellung.
>
> Ja, aber für Leute die keine Ahnung davon haben ist das nicht gruselig
> sondern irgendwie normal.

Könnte es sein, dass das eigentliche Problem an einer ganz anderen 
Stelle liegt?

Wenn es keinen SW-Projektleiter gibt, der Termine vorgibt wann was 
fertig zu sein hat (fertig = getestet und im Release integriert), dann 
hat man ein Problem.

In einer vernünftig geführten Abteilung kann es nicht passieren, dass 
jemand jahrelang vor sich hinfrickelt und seinen Code in der ganzen Zeit 
nie integriert. Somit habt Ihr vielleicht eher ein Führungsproblem als 
ein technisches Problem.

: Bearbeitet durch User
von Narfie (Gast)


Lesenswert?

Unabhängig von der bisherigen Diskussion hat mich diese Form der 
Organisation des Repositories beeindruckt. Leider konnte ich damit in 
der Praxis noch keine Erfahrung sammeln:

http://nvie.com/posts/a-successful-git-branching-model/

Aber vll. gibt der Link ja ein paar Anregungen.

von Mladen G. (Gast)


Lesenswert?

Mark B. schrieb:
> Wenn es keinen SW-Projektleiter gibt, der Termine vorgibt wann was
> fertig zu sein hat (fertig = getestet und im Release integriert), dann
> hat man ein Problem.

Es gibt genug Gegenbeispiele zu dieser These, viele kleine und mittlere 
OpenSource SW Projekte brauchen gar keinen "Projektleiter", in agilen - 
also selbstorganisierten- Teams wird der Aufwand vom Team geschaetzt, 
wann was fertig ist ist eine Frage der Prioritaeten, diese werden vom 
Kunden (bzw. dessen Stellvertreter im Team) gesetzt.

Mark B. schrieb:
> In einer vernünftig geführten Abteilung kann es nicht passieren, dass
> jemand jahrelang vor sich hinfrickelt und seinen Code in der ganzen Zeit
> nie integriert. Somit habt Ihr vielleicht eher ein Führungsproblem als
> ein technisches Problem.

Das sehe ich aehnlich, wenn es keine richtige Fuehrung gibt die es 
schafft Teams zu formen, Leute zu motivieren und dazu bringt selbst 
Verantwortung zu uebernehmen, liegt es nicht an den Werkzeugen oder 
deren Bedienung.

Erwin M. schrieb:
> Ich suche Best Practice Richtlinien für Versionsverwaltung, denn in der
> Firma gibt es Kollegen, insbesondere einige die nicht programmieren
> können, die meinen da gehören nur freigegebene Versionen hin -

Wuerde mir die Diskussion mit denen die nicht programmieren koennen 
ueber solche Prozesse sparen (ausser du machst das um zu informieren), 
denn die sollten das nicht entscheiden, falls, doch, kann/sollte man 
einen Arbeitgeberwechsel in Betracht ziehen.

von Mladen G. (Gast)


Lesenswert?

Hier noch der obligatorische relevante xkcd comic: 
https://xkcd.com/1597/

von Mark B. (markbrandis)


Lesenswert?

Mladen G. schrieb:
> Mark B. schrieb:
>> Wenn es keinen SW-Projektleiter gibt, der Termine vorgibt wann was
>> fertig zu sein hat (fertig = getestet und im Release integriert), dann
>> hat man ein Problem.
>
> Es gibt genug Gegenbeispiele zu dieser These, viele kleine und mittlere
> OpenSource SW Projekte brauchen gar keinen "Projektleiter"

Die haben aber auch keine festen, dem Kunden per Vertrag zugesagten 
Termine einzuhalten. Ob die neue Version des Linux-Kernels nun am 17.3. 
oder am 18.4. kommt ist egal, da steht keine Vertragsstrafe dahinter 
wenn man den Termin nicht hält.

> in agilen - also selbstorganisierten- Teams wird der Aufwand vom Team
> geschaetzt, wann was fertig ist ist eine Frage der Prioritaeten, diese
> werden vom Kunden (bzw. dessen Stellvertreter im Team) gesetzt.

In manchen Firmen ist man sehr, sehr weit weg vom Kunden. Gerade in 
großen Konzernen besteht praktisch überhaupt kein Kontakt zwischen dem 
Kunden und dem Entwickler. Von daher ist dieser Weg leider nicht immer 
gangbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.