Hallo!
Da es zu sehr OffTopic wäre, hier ein eigenes Thema zur Versionierung.
Ich weiß, dass es viele unterschiedliche CVS gibt, aber für mich sind das alles bömische Dörfer.
Ich verwende so gut wie keine Versionierung. Ich weiß dass es - auch bei ein-Mann Projekten - kontraproduktiv ist.
Und ich möchte es in Zukunft ändern. Muss mich damit beschäftigen, deswegen meine Newbie-Fragen.
Ist gar nicht so schwer.
Es gibt zwei Arten von Versionsverwaltung:
"Zentrale Systeme" (CVS, SVN (SubVersioN)) und
"Verteilte Systeme" (praktisch alle anderen OpenSource-Systeme incl. Git).
Heutzutage haben eigentlich nur zwei Systeme noch große Bedeutung: SVN(SubVersioN) und Git. Auf die beschränke ich mich.
Jede IDE die etwas auf sich hält (ob nun Eclipse, PHPDesigner oder wie sie alle heißen) hat eine Integration von SVN & Git.
TortoiseSVN und TortoiseGit ist eine Möglichkeit - aus meiner Sicht aber keine gute. Speicherfressend und Instabil. Sieht nett aus, aber das war es schon. Leider ist es für Einsteiger (unter Windows) die einzige "Klicki-Bunti" Möglichkeit. Ich bevorzuge lieber die Konsole - die paar Befehle sind schnell gelernt. Zudem ist es egal, ob ich mich nun auf meinem lokalen PC oder extern befinde. Für Git bevorzuge ich "msysgit".
Ich will aber Github - weder Git noch SVN!Berechtigter Einwand. Oft wird hier im Forum Git und Github gleichgesetzt. Es hat aber erst einmal gar nichts miteinander zu tun. So wie Auto und Autogarage.
Ich kann mein Auto irgendwo haben und ich kann eine Autogarage als Wintergarten benutzen, ohne ein Auto zu besitzen.
Github ist die Garage. Hier kann man eine Versionsverwaltung hinterlegen.
Ob das aber nun unter Github, websitebaker.org oder "MyFunnyPC" stattfindet ist schnurz. Github ist halt der größte Dienstleister, kostenlos (mit Einschränkung) und sicher einer der Gründe, wieso sich Git so schnell verbreitet hat.
1. Was soll ich nun für eine Versionsverwaltung nehmen?Wir wissen: SVN ist zentral, Git dezentral.
Man sollte sich vorher überlegen, was man später will.
- Ich arbeite alleine => Git oder SVNEs ist schwierig hier einen Kandidaten hervorzuheben.
Gar keiner ist eine Möglichkeit - aber nicht immer gut.
Es ist einfach beruhigender, am Ende des Arbeitstages einen "Commit" zu fahren. Und je nachdem ob er gut war freut man sich, wenn der PC kaputt ist aber die Arbeit nicht. Und wenn der Tag schlecht war, dass man auf den Tag zuvor zurück kann.
Zudem gibt es eine Chronik wo ich Änderungen leicht nachvollziehen kann - Änderungen an Dateien usw. Man muss eben einmal Ordnung ins Chaos bringen.
SVN ist dann gut, wenn man einen zentralen Server bevorzugt.
Git ist dann besser, wenn man sich um einen Server nicht sorgen will (Stichwort: Github. Doch Vorsicht! Auch wenn es nicht nach "Server" aussieht, ist es einer!) Mehr später.
- Ich arbeite mit anderen in einer einzigen, abgeschlossenen Gruppe => SVNEs ist hier besser, auf die dezentrale Arbeitsweise von Git zu verzichten.
Ein einziger Server der gesichert wird. Kopien wird es nicht geben. Zur Not kann man auch mit SVN klonen (clone).
- Ich arbeite mit anderen an einem OpenSource (alternativ: offenem) Projekt => GitOpenSource Projekte haben die Angewohnheit, dass man sich auf nichts verlassen kann. Mal geht eine Entwickler, dann kommen fünf, mal ist der Teil der Software wichtig, mal jener. Ungewollte, agile Softwareentwicklung eben.
Um die Arbeit zu beschleuigen, kann man das Projekt von vorneherein in sinnvolle Pakete schnüren (nicht verwechseln mit Java packages!) und diese unabhängig voneinander vorantreiben. Bei WebsiteBaker könnte man z.B. "framework", "admin" und "templates" aufspalten in unabhängige Pakete. Jedes Team hat ihren Server - egal wo - sinnigerweise sogar jedes Teammitglied.
2. Was ist nun SVN (SubVersioN) bzw. Git?SVN: Ich habe einen Server und Leute, die mitarbeiten. Denken die Leute, sie hätten etwas fertiggestellt (oder den Tag rumgebracht) wird an den Server ein "commit" vollzogen. Mehr gibt's nicht zu sagen - danke für die Aufmerksamkeit.
Git: Ich habe Leute die mitarbeiten, und jeder hat seinen Server. Verschiedene Leute bilden Projekt-Teams (in Git heißt es "branch" - ein Entwicklungszweig), die haben wiederum Server und am Ende hat man einen Master, der eigentlich nichts tut außer das Sammelsurium aus Unter-Projekten in einem darzustellen.
Wenn verschiedene Branches (Projekt-Teams) zusammengelegt werden sollen nennt man das "merging" (in der WB-Sprache gerne auch Fork genannt).
Im Prinzip ist bei Git egal was hinten rauskommt - Hauptsache die Unterprojekte stimmen. Wenn man der Server abraucht oder ein neues Team gegründet wird ist es auch egal.
Also: Ich "commit" zwar bei Git, doch erst einmal bei mir lokal. Ich "push" erst dann meinen "commit" an den Team-Server. Der kann dann wieder vom Projekt-Entwicklungsleiter "commit" werden und an den "Master-Branch" "gepusht.
Alternativ kann man natürlich den Team-Server auch rauslassen - eben ein komplexeres Beispiel, das mit SVN so garantiert nicht klappt.
Man soll aber nicht verschweigen, dass das Mehr an Komplexität auch ein Mehr an Sorgfältigkeit nach sich zieht. Wirft man bei SVN einfach mal alles zum Server, geht das bei Git nicht - weil jeder prinzipiell ein Server ist.
Und noch einmal zu guter Letzt: Nur weil Github so bekannt & beliebt ist, ist es 100% reines Git. Mit allen Tücken. Auch wenn auf der ersten Blick Git sicherer aussieht als SVN - es kommt aus der Linux Welt. Einmal vollzogen - immer vollzogen. Wer nicht aufpasst, hat seinen Workspace schneller geschrottet, als er bis drei zählen kann. Mit SVN geht das zwar auch, aber deutlich schwerer.
3. Die Praxis - wie lege ich meine Repository (Verzeichnisstruktur) anJede Versionsverwaltung braucht ein Startverzeichnis.
SVN: svnadmin create C:\Web\mysvnproject1
Git: git init C:\Web\mygitproject1
So weit, so langweilig. Wenn es hier Probleme gibt bitte melden - gerade der Anfang "warum geht svnadmin nicht?" verhindert jegliches weitere befassen.
Nun habe ich also meine Versionsverwaltung - oder besser: Ein Verzeichnis, wo entweder ein Ordner ".svn" oder ".git". Der führende Punkt ist wichtig - versteckter Ordner unter Unix.
[Bei Interesse To be continued .... ]