Das Problem der Sicherungskopien
Stellen Sie sich vor, Sie haben ein umfangreiches
Projekt. Sie schreiben daran und erreichen
irgendwann einen gewissen logischen
Abschluss und veröffentlichen Version 1.0,
die von den Nutzern in Gebrauch genommen wird.
Die Arbeit hört jedoch nicht auf,
und Sie veröffentlichen Version 1.1 mit Fehlerbehebungen
und Ergänzungen, dann Version 1.2,
dann 1.3, und dann schreiben Sie alles
von Neuem und kündigen das Erscheinen von Version 2.0 an.
Und so weiter - die Arbeit am Projekt
endet normalerweise nie.
Während der Entwicklung besteht jedoch das Risiko, etwas im Code zu beschädigen oder versehentlich das Projekt oder einen Teil davon zu löschen. Um nicht die gesamte Arbeit zu verlieren, speichern Sie periodisch den Code des Projekts in einem separaten Ordner. Ihre Sicherungen nummerieren Sie einfach der Reihe nach und fügen einen Kommentar zur Sicherung hinzu, der festhält, welche Änderungen Sie vorgenommen haben oder welche Funktionalität Sie bis zu diesem Zeitpunkt der Sicherung bereits implementiert hatten.
Es stellt sich jedoch plötzlich heraus, dass man nicht einfach
Version 2.0 veröffentlichen kann, weil
die Nutzer der ersten Version protestieren - sie sind noch nicht bereit,
auf die zweite umzusteigen. Okay, sagen Sie,
und beginnen an der zweiten Version zu arbeiten,
während Sie parallel Updates für die erste veröffentlichen.
Ihr Projekt spaltet sich in zwei Ordner auf - einen für
die erste Version und einen für die zweite. Ebenso spaltet sich
der Ordner für die Sicherungskopien.
Dabei ist ein Teil des Codes der ersten und zweiten
Version identisch. Wenn Sie Änderungen an diesem
Code in einer Version des Projekts vornehmen, müssen Sie
nicht vergessen, die Änderungen auch in der anderen
Version vorzunehmen. Sie vergessen das
jedoch manchmal.
Es treten seltsame Bugs auf.
Die Arbeit stockt.
Während der Arbeit an Version 2.0 haben Sie beschlossen,
eine neue Funktion hinzuzufügen. Diese umzusetzen dauert jedoch lange
und Sie beschließen, die zweite Version
in zwei Ordner aufzuteilen und den Code zu duplizieren. Im ersten Ordner
führen Sie die weitere Entwicklung Ihres
Projekts fort, und im zweiten implementieren Sie die geplante
Funktion. Schließlich ist die Funktion fertig. In dieser Zeit
ist das Hauptprojekt bereits bei Version 2.3 angelangt.
Nun müssen Sie den Code mit der Funktion mit dem Hauptcode
des Projekts zusammenführen. Sie beginnen, Dateien
in den Hauptordner zu kopieren und gleichzeitig
Konflikte zwischen neuem und altem Code zu lösen. Das kostet
Sie drei Arbeitstage. Die Arbeit stockt.
Das Projekt ist gewachsen. Sie beschließen, einen Freund um Hilfe zu bitten. Sie weisen Ihren Freund an und senden ihm ein Archiv mit dem Projekt. Der Freund erledigt die Aufgabe und schickt Ihnen ein Archiv mit neuen Dateien zurück, sowie mit alten, in die er Änderungen vorgenommen hat. Einen halben Tag verbringen Sie damit, die neuen Dateien von den alten zu trennen. Dann verbringen Sie noch einen Tag damit, die Änderungen in Ihre eigenen Dateien zu integrieren.
Sie holen noch zwei Freunde zur Hilfe. Nun sind Sie zu viert. Täglich erhalten Sie Archive mit der geleisteten Arbeit. Sie integrieren die neuen Teile ins Projekt und versenden an alle die Projektarchive mit den Änderungen. Die Arbeit schreitet langsam voran, denn während Sie eine Änderung integrieren, warten Ihre Freunde, bis Sie ihnen die neue Version des Projekts zuschicken und können nicht weiterarbeiten, um nicht völlig aus dem Sync zu geraten.
Im Ordner mit den Sicherungskopien befinden sich bereits Gigabytes an Code. Dabei liegen dort hauptsächlich Duplikate, denn wenn Sie einen kleinen Teil des Codes ändern, sichern Sie trotzdem das gesamte Projekt. Sie beschließen, diesen Ordner aufzuräumen, indem Sie die ersten hundert Versionen löschen. Eine Woche später stellt sich heraus, dass in den gelöschten Versionen der Code für eine bestimmte Funktion war, von der Sie damals Abstand genommen haben, die Sie jetzt aber wieder einfügen möchten. Aber der Code mit dieser Funktion ist bereits gelöscht und existiert nirgends mehr. Sie schreiben diese Funktion erneut. Die Arbeit stockt.
Klingt nicht so gut, oder? Entwickler haben tatsächlich früher so gearbeitet, wie ich es oben beschrieben habe. Das war natürlich sehr unpraktisch. Daher entstand ein spezielles System namens Git, über dessen Möglichkeiten wir in der nächsten Lektion sprechen werden.