vcs:why
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | vcs:why [2020-05-31 14:54] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Warum Versionskontrolle ====== | ||
+ | > // Durch Schaden wird man klug, // | ||
+ | > // Sagen die klugen Leute. // | ||
+ | > // Schaden litt ich genug, // | ||
+ | > // Doch bin ich ein Tor noch heute. // | ||
+ | >> --- Friedrich Rückert | ||
+ | |||
+ | " | ||
+ | Wenn du Computer nutzt und darauf keine Antwort hast, | ||
+ | solltest du diesen Artikel vermutlich lesen. | ||
+ | Ein Programmierer sollte damit vertraut sein. | ||
+ | Schütze Deine Quellen. | ||
+ | Das gilt nicht nur für Mineralwasserproduzenten, | ||
+ | Neuere Versionskontrollsysteme wie | ||
+ | [[https:// | ||
+ | und | ||
+ | [[https:// | ||
+ | nutzen ein | ||
+ | [[http:// | ||
+ | Eine Einführung in das Wie gibt es [[how|hier]]. | ||
+ | ===== Was ist Versionskontrolle? | ||
+ | ==== Typische Fragen | ||
+ | Wie kann ich ... | ||
+ | |||
+ | * meine Daten wiederfinden? | ||
+ | * den Arbeitsstand von heute vormittag, letzte Woche, vom xx.xx.xx einsehen? | ||
+ | * diesen Stand wiederherstellen, | ||
+ | * erkennen, was wann/von wem geändert wurde? | ||
+ | * die Übersicht über viele Dateien und deren Änderungen behalten? | ||
+ | * Varianten ausprobieren, | ||
+ | * verschiedene Entwicklungslinien wieder zusammenführen? | ||
+ | * meinen Arbeitsstand an verschiedenen Orten/ | ||
+ | * meine Ergebnisse anderen mitteilen? | ||
+ | * andere an meinem Projekt beteiligen? | ||
+ | |||
+ | Auf jede dieser Fragen gibt es unterschiedliche Antworten, | ||
+ | es gibt aber auch für alle eine einheitliche --- | ||
+ | Versionskontrolle. | ||
+ | Kurz gesagt geht es darum, wie und nach welchen Grundsätzen | ||
+ | du deine Arbeit organisierst. | ||
+ | |||
+ | ==== Aufgaben ==== | ||
+ | Für die dauerhaft erfolgreiche Arbeit am Computer | ||
+ | gibt es ein paar Grundregeln, | ||
+ | die aber von verblüffend vielen verblüffend häufig missachtet werden: | ||
+ | |||
+ | * Keep it strictly simple (KISS-Principle). Versuche nicht, " | ||
+ | * Schreibe Klartext. Einfaches Textformat wird nicht bei Versionswechseln unlesbar. Es lässt sich bei Systemwechseln leicht portieren. Programmquellen sind nicht ohne Grund Klartext. | ||
+ | * Entwickeln kostet Zeit und Mühe. Sichere Dein Arbeitsergebnis. Ohne Quellen wird ein Programm recht schnell unbrauchbar. | ||
+ | * Speichere regelmäßig Kopien (Backups) davon, möglichst nicht auf der gleichen Festplatte, demselben Rechner, im gleichen Brandabschnitt, | ||
+ | * Keine fadenscheinigen Ausreden, wie ich sie vor Jahren von einem meiner Schüler gehört habe: Meine Freundin ([[http:// | ||
+ | * Dokumentiere, | ||
+ | * Don't repeat yourself (DRY-Principle). Sei faul, indem du Aufgaben beim ersten Mal richtig erledigst, nicht, indem du sie umgehst. | ||
+ | * Automatisiere. Überlasse wiederkehrende Aufgaben der Maschine. | ||
+ | * Kenne und nutze deine Werkzeuge richtig. | ||
+ | |||
+ | Solche als richtig erkannte Grundsätze umzusetzen und durchzuhalten, | ||
+ | ist schwer, | ||
+ | wenn deren Einhaltung Mehraufwand bedeutet, vor allem zu Beginn. | ||
+ | Ein Versionsverwaltungssystem unterstützt | ||
+ | |||
+ | * Dokumentieren und Zurücknehmen von Änderungen, | ||
+ | * Abgleichen von Entwicklungszweigen, | ||
+ | * Koordinieren von Teamarbeit, | ||
+ | * Archivieren von Quelltext lokal und im Netz (Source-Code-Hosting). | ||
+ | |||
+ | Ist es einfach zu bedienen, wird es auch intensiv genutzt. | ||
+ | Dann hilft es wirklich beim Verwalten des Quelltexts. | ||
+ | Hier gilt allerdings: | ||
+ | Selbst kleine Mängel eines solchen Systems sind | ||
+ | vernachlässigbar gegen die Risiken und den Ärger, | ||
+ | der aus der | ||
+ | [[http:// | ||
+ | entsteht. | ||
+ | |||
+ | ==== Ist das schon Versionskontrolle? | ||
+ | Kein längerer Text entsteht in einem Guss. | ||
+ | Er wird wieder und wieder überarbeitet, | ||
+ | verschiedene Fassungen, Versionen, entstehen. | ||
+ | Eine Vorstellung davon liefert jeder Artikel der Wikipedia. | ||
+ | Wikipedia archiviert alle Fassungen eines Artikels in seiner Datenbank. | ||
+ | Jede der Fassungen ist weiterhin einsehbar, | ||
+ | um sie zu vergleichen und | ||
+ | im Falle von Vandalismus auch einfach wiederherstellen zu können. | ||
+ | Wider alle anfängliche Skepsis funktioniert dieses offene System der Versionsverwaltung erstaunlich gut. | ||
+ | |||
+ | Die in diesem System angelegte Unmöglichkeit, | ||
+ | unliebsame Textstellen endgültig zu löschen, | ||
+ | und mangelndes technisches Verständnis verleitete 2008 einen | ||
+ | [[http:// | ||
+ | zu einem Versuch der Internet-Zensur. | ||
+ | Er klagte, um Wikipedia in Deutschland verbieten zu lassen, | ||
+ | so dass | ||
+ | [[http:// | ||
+ | drei Tage lang in Deutschland für Leute unerreichbar war, | ||
+ | denen es nicht gelang, | ||
+ | die stattdessen angezeigte URL | ||
+ | [[http:// | ||
+ | in die Adresszeile ihres Webbrowsers zu kopieren. | ||
+ | |||
+ | Einige der Probleme, | ||
+ | die mit Versionskontrolle zusammenhängen, | ||
+ | lassen sich teilweise durch diszipliniertes Arbeiten oder softwareseitig lösen, | ||
+ | aber das ist nicht sehr praktikabel: | ||
+ | |||
+ | * **Tarball**: | ||
+ | * **Dateiabgleich**: | ||
+ | * **Versionierung**: | ||
+ | * **Dateisperre**: | ||
+ | |||
+ | ===== Verfügbare Systeme ===== | ||
+ | Frühe lokale Versionskontrollsysteme wie SCCS und RCS sind nur noch wenig verbreitet. | ||
+ | Für die Teamarbeit sind zentrale oder verteilte Ablagen (Repositories) erforderlich. | ||
+ | Neben kommerziellen sind auch leistungsfähige freie Open-Source-Systeme verfügbar. | ||
+ | |||
+ | Pessimistische Systeme sperren beim Check-Out die bearbeitete Datei bis zum Check-In, | ||
+ | um so Bearbeitungskonflikte zu verhindern (lock-modify-write). | ||
+ | |||
+ | Optimistische System erlauben hingegen mehrere Arbeitskopien, | ||
+ | deren Änderungen beim Einchecken abgeglichen werden müssen (copy-modify-merge). | ||
+ | Aufgrund ihrer Arbeitsweise sind alle verteilten Systeme optimistisch. | ||
+ | |||
+ | |||
+ | ==== Zentrale Versionskontrolle ==== | ||
+ | Systeme wie | ||
+ | [[http:// | ||
+ | (SVN) | ||
+ | oder Team Foundation Server (TFS, Microsoft) | ||
+ | benötigen für jede Aktion Netzzugriff. | ||
+ | Dies kann bei langsamen Leitungen (Internetverbindung) viel Zeit in Anspruch nehmen. | ||
+ | Damit entsteht eine negative Rückkopplung. | ||
+ | Weil es lange dauert, wird das Einchecken / der Commit hinausgezögert. | ||
+ | Während dieser Zeit sammeln sich viele Änderungssätze an. | ||
+ | Damit steigt wiederum der Aufwand für den Abgleich und die Wahrscheinlichkeit von | ||
+ | Bearbeitungskonflikten, | ||
+ | Von Subversion-Nutzern ist zu hören, | ||
+ | dass Einchecken und Mergen in großen Projekten | ||
+ | nur dann erlaubt ist, wenn alle Tests bestanden wurden. | ||
+ | |||
+ | Pessimistische Systeme wie der veraltete | ||
+ | und als völlig unbrauchbar betrachtete | ||
+ | Visual Source Safe (VSS, Microsoft) | ||
+ | leiden zudem unter der ständigen Blockade des parallelen Arbeitens. | ||
+ | |||
+ | ==== Verteilte Versionskontrolle ==== | ||
+ | [[wpde> | ||
+ | [[wpde> | ||
+ | Nur für den Repository-Austausch (clone, pull, push) ist Netzzugriff erforderlich. | ||
+ | Quelloffene Repositories im Netz ermöglichen Zusammenarbeit auch über wechselseitigen Lese-Zugriff (pull request). | ||
+ | Versionen werden lokal gespeichert und abgeglichen. | ||
+ | Hier gilt: Commit early, merge often. | ||
+ | Selbst an der Kommandozeile sind diese Syteme recht einfach und flüssig zu bedienen ist, wie | ||
+ | [[vcs: | ||
+ | gezeigt wird. | ||
+ | |||
+ | ==== GUI-Tools ==== | ||
+ | Grafische Werkzeuge wie | ||
+ | [[http:// | ||
+ | integrieren sich in den Windows Explorer, | ||
+ | für Entwicklungsumgebungen (Eclipse, Visual Studio Code) gibt es Plugins. | ||
+ | |||
+ | ==== Quellcode-Hosting ==== | ||
+ | Zentrale und Haupt-Repositories verteilter Systeme können auf eigenen Servern angelegt | ||
+ | oder im Internet gelagert werden (Source-Code-Hosting). | ||
+ | Das erleichtert den Abgleich bei wechselnden Arbeitsorten. | ||
+ | Besonders für Open-Source-Projekte existiert(e) eine [[wp> | ||
+ | |||
+ | | | System | Land | seit | Nutzer | | ||
+ | | [[http:// | ||
+ | | [[https:// | ||
+ | | [[http:// | ||
+ | |||
+ | Die Angebote werden durch Wikis und Bugtracker ergänzt. | ||
+ | Entscheidet man sich, Daten dort abzulegen, sollte man vorher das Kleingedruckte lesen. | ||
+ | In welchem Land der Anbieter beheimatet ist, kann eine Rolle spielen | ||
+ | (US-Exportbestimmungen, | ||
+ | [[https:// | ||
+ | [[http:// | ||
+ | Bitbucket und seit 2019 auch Github bieten bei kostenlosem Zugang | ||
+ | neben quelloffenen auch eine unbegrenzte Anzahl privater Repositories, | ||
+ | auf die eine begrenzte Zahl von Nutzern Schreibberechtigung erhalten kann. | ||
+ | |||
+ | Es ist beeindruckend, | ||
+ | Michael Ogawa hat | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ===== Grundbegriffe ===== | ||
+ | Je nach System werden verschiedene | ||
+ | [[http:// | ||
+ | benutzt, hier eine Auswahl der wichtigsten: | ||
+ | |||
+ | * **Version**: | ||
+ | * **Repository**: | ||
+ | * **Update**: Aktualisieren, | ||
+ | * **Commit**: (dt. festlegen, überantworten, | ||
+ | * **Klonen**: Kopie eines Repositories erzeugen, die unabhängig weiterentwickelt werden kann. | ||
+ | * **Branch**: Zweig, Entwicklungslinie, | ||
+ | * **Konflikt**: | ||
+ | * **Merge**: Zusammenführen von Versionen bzw. Entwicklungslinien, | ||
+ | * **Wiederherstellen**: | ||
+ | * **Delta**: Differenz, Änderungen zwischen zwei Versionen, sind zumeist platzsparender zu speichern. | ||
+ | |||
+ | ===== Quellen, Anleitungen, | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | * [[https:// |