Versionskontrolle mit Git

Ähnliche Dokumente
git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

Apache Subversion (SVN)

Git - Fast Version Control System

Arbeiten mit dem Versionsverwaltungssystem. Jannik Kramer Proseminar Werkzeuge für das wissenschaftliche Arbeiten

Versionsverwaltung. Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner

Versionierung und Bugtracking mit Git(Hub)

Linux Cafe Referent: Bernd Strößenreuther

Programmieren 2 06 Git-Teamwork und Egit

Von SVN zu Git. Daniel Willmann cbna

Praktikum Ingenieurinformatik (PI)

Einführung in Git. Dirk Deimeke. 19. August My own IT. ddeimeke (My own IT) Einführung in Git 19. August / 23

Moodle aktuell halten mit Git

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

Versionsverwaltung mit git

git Änderungen verwalten mit git

Versionsverwaltung. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009

Thomas Rau (mit Material von Peter Brichzin) Repositories zur Unterstützung von kollaborativen Arbeiten in Softwareprojekten

Git II. Dezentrale Versionsverwaltung im Team

Einführung in Verteilte Versionskontrollsysteme. am Beispiel von Git

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Versionsverwaltung mit SVN

Versionskontrolle mit Subversion

git verteilte Versionskontrolle

Versionkontrolle mit git

Versionsverwaltung mit GIT

Die Projek*ools. Files, Git, Tickets & Time

Subversion als Werkzeug in der Software-Entwicklung Eine Einführung. Tobias G. Pfeiffer Freie Universität Berlin

Medieninformatik Praktikum. Jens Rademacher

Versionsverwaltung mit git. Christoph Knabe FB VI

Proseminar Unix-Tools CVS Daniel Weber & Zhen Zhang Betreuer: Volker Baier

Einführung in Subversion

Tool-Chain. Übung. Eclipse, SVN, Ant, Cobertura, Metrics Labor "Software Engineering Experiment" Sebastian Meyer und Kai Stapel

Apache Subversion (SVN)

Seminar. Bachelor Wirtschaftsinformatik

Sourcecodeverwaltung

Git in großen Projekten

Software Engineering in der Praxis

Programmieren 2 05 Versionsverwaltung mit Git

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

Subversion. Einstieg in die. Versionskontrolle

Versionsverwaltung mit Mercurial für Einsteiger

WOZU VERSIONSKONTROLLE?

Versionskontrollsysteme

git Workshop Matthias Beyer Hochschule Furtwangen University matthias. hs-furtwangen. de beyermatthias. de 19.

Dezentrale Versionsverwaltung

Einführung in Subversion

CVS. The open standard for version control. (Concurrent Versions System) Maik Zemann CVS

Einführung Git Interna Workflows Referenzen. Git. Fast Version Control System. Michael Kuhn

Versionskontrolle. Vortrag im Master-Praktikum MindStreams Sommersemester Michael Fiedler 30.

Versionsverwaltung GIT & SVN. Alexander aus der Fünten. Proseminar: Methoden und Werkzeuge, SS Lehrstuhl i9, Prof. Dr. T.

Verteile Revisionskontrolle mit GIT

Einführung in git. Johannes Gilger & Matthias Lederhofer. Rechen- und Kommunikationszentrum der RWTH Aachen Network Operation Center. 14.

Softwareentwicklung I (IB) Versionsverwaltung mit Git

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Konfigurationsdateien mit Git verwalten

Einführung in Subversion. Tutorium SWP

Klicken Sie, um das Format des Titeltextes zu bearbeiten

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Versionskontrolle mit Subversion

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann

Spiel, Spaß und Spannung mit Git

Einfu hrung in Subversion mit TortoiseSVN

Torsten Flatter inovex GmbH. "Git.NET" gibt's nicht?

Software Engineering in der Praxis

1 Zugang zum GIT Repository

Linux-Einführung Übung

Eine Einführung in das verteilte Quelltextverwaltungssystem Git

Versionskontrollsysteme. Uwe Berger & Markus Dahms <bralug@bralug.de>

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN)

Migration von Subversion nach Mercurial und Einsatz dezentraler Versionskontrolle in Unternehmen

8. Dokumentenverwaltung mit CVS eine Einführung

Wichtige Git-Befehle

GIT & SVN. Rheinisch-Westfälische Technische Hochschule Aachen Lehrstuhl für Datenmanagement und -exploration Prof. Dr. T. Seidl

CVS-Einführung. Sebastian Mancke,

Installation von Git für unsere OpenDCC/Fichtelbahn Entwickler Stephan Bauer, Christoph Schörner, Andreas Kuhtz

Git-Workflows im Alltag

Versionsverwaltungssysteme

Versionsverwaltung mit Git Kurze Einführung am Beispiel von L A TEX. E. Frank Sandig

Versionskontrolle mit Subversion

Versionsverwaltung von Softwareartefakten. Dr. Thorsten Arendt Marburg, 06. November 2014

Gitting started. Christian Neukirchen. 14dec2011

Versionsverwaltung mit Git

Source Code Verwaltung mit Git

Versionsverwaltung mit Git

Versionsverwaltung von Softwareartefakten. Dr. Thorsten Arendt Marburg, 05. November 2015

Julius Plenz. Valentin Haenel. Git. Verteilte Versionsverwaltung für Code Dokumente. 2. Auflage. Open Source Press

Transkript:

27. März 2009 Übersicht 1 Geschichte Vergleich mit anderen Systemen 2 Allgemeines Anlegen eines lokalen Repositories Grundlagen Arbeiten mit Entwicklungszweigen Gemeinsames Arbeiten über öffentliche Repositories Verteilte Entwicklung

1 Geschichte Vergleich mit anderen Systemen Allgemein Lineare und Nichtlineare Entwicklung Geschichte Geschichte Gestartet von Linus Torvalds, dem Initiator und Projektleiter des Linux-Kernels Derzeitiger Leiter: Junio Hamano Anfänglicher Zweck: Ersetzen von BitKeeper in der Kernelentwicklung (Lizenzprobleme) Wird nun von mehreren großen Projekten verwendet, unter anderem: Git QT (Programmbibliothek) VLC (Media-Player) Linux-Kernel GNOME (stellt gerade um)

Geschichte zum Namen... git bedeutet auf Englisch soviel wie Dummkopf oder Depp. Linus Torvalds dazu: I m an egoistical bastard, and I name all my projects after myself. First Linux, now git. Vergleich mit anderen Systemen Eigenschaften Schwerpunkt: Nichtlineare Entwicklung Schnelles Anlegen und Verschmelzen von Entwicklungszweigen Werkzeuge zur grafischen Veranschaulichung der Entwicklungsgeschichte Aber auch: Keine Revisionsnummern wie z.b. bei SVN Trotzdem wird kein Entwicklungsmodell vorgeschrieben, auch lineares Vorgehen möglich Verteilte Entwicklung: Jeder Programmierer hat Zugriff auf die komplette Projektgeschichte Auch ohne Server und ohne dass alle Teammitglieder ständig erreichbar sind

Vergleich mit anderen Systemen Eigenschaften Vielfältige Möglichkeiten zur Veröffentlichung von Repositories, z.b. über: HTTP, FTP oder eigenes Protokoll Vollständig kompatibel zu SVN-Repositories (über git-svn) Besonders geeignet für sehr große Projekte Flexibel Baukasten-Design Erweiterbar durch eigene Skripte Vergleich mit anderen Systemen Lineare Entwicklung Traditionelle Vorgehensweise: Im Wesentlichen ein Hauptentwicklungszweig, an dem gearbeitet wird Nachteile: Wenig Möglichkeiten zum Experimentieren (Hauptzweig darf nicht kaputt gehen) Ineffizient bei sehr großen Projekten (z.b. Linux-Kernel) Sinnvoll für kleinere bis mittlere Projekte, da streng geregelter Ablauf

Vergleich mit anderen Systemen Nichtlineare Entwicklung Jeder Benutzer hat seinen eigenen Entwicklungszweig ( branch ) und kann bei Bedarf beliebig viele weitere anlegen Meistens kein zentrales Repository (verteilte Versionskontrolle) Änderungen anderer Entwickler können jederzeit abgeholt werden ( pull ) Dadurch entstehen sehr viele Zweige, die dann wieder zusammengefügt ( merge ) oder auch verworfen werden Cherry-Picking möglich, d.h. statt ganzer Zweige können auch gezielt nur einzelne Änderungen übernommen werden Vergleich mit anderen Systemen Nichtlineare Entwicklung: Beispiel

Vergleich mit anderen Systemen Nichtlineare Entwicklung: Nachteile Kann leicht ins Chaos ausarten Deshalb: Klare Aufgabenverteilung nötig Entwickler müssen wissen, wann und von wem sie den Zweig bekommen, den sie für ihre Arbeit benötigen (teilweise Abhilfe durch Tags) Vergleich mit anderen Systemen In der Praxis Projekt wird in einzelne Teilprojekte untergliedert Ein zentrales Repository, welches sich nach Bedarf oder in regelmäßigen Abständen die Änderungen der Unterprojekte zieht und einpflegt Schreibender Zugriff auf das zentrale Repository nur durch den Projektleiter Verwaltung der Änderungen in den Unterprojekten häufig wie bei SVN Unterprojekte holen zentrale Änderungen bei Bedarf bzw. nach Aufforderung durch Projektleiter aus dem Haupt-Repository

Vergleich mit anderen Systemen In der Praxis Hierarchische Projektstruktur Klare Aufgabenverteilung durch Unterprojekte 2 Allgemeines Anlegen eines lokalen Repositories Grundlagen Arbeiten mit Entwicklungszweigen Gemeinsames Arbeiten über öffentliche Repositories Verteilte Entwicklung

Allgemeines Syntax Kommandozeilenorientiert Aufruf über git kommando --option1 --option2... objekt Online-Hilfe Allgemein, Liste der wichtigsten Kommandos: git --help Ausführlicher: man git Zu speziellem Befehl: git kommando --help Allgemeines Zugriff auf Änderungen Keine Revisionsnummern, sondern Schlüssel und Tags HEAD bezeichnet die letzte eingetragene Änderung des aktuellen Zweiges Beispiel: git diff de013ab79760b..head Zeigt Änderungen seit Commit de013ab79760b... Erste Zeichen des Schlüssels reichen aus, wenn eindeutig

Allgemeines Vereinfachter Zugriff auf neueste Änderungen HEADˆ vorletzte eingetragene Änderung HEADˆˆ : vorvorletzte Änderung HEAD 4 : 4 Einträge zurückliegende Änderung Anlegen eines lokalen Repositories Ein neues lokales Repository anlegen cd myproject git init git add. git commit Macht aus dem Verzeichnis myproject ein Git-Repository Berechtigungen entsprechen der Dateimaske des Users, d.h. normalerweise können alle Benutzer des lokalen Rechners lesend zugreifen und nur der Eigentümer selbst darf schreiben Dritte Zeile stellt bereits vorhandene Dateien unter Versionskontrolle (vgl. SVN) Letzte Zeile: Anfänglicher Eintrag in die Versionsverwaltung, der Startpunkt

Grundlagen Dateien hinzufügen Einzelne Dateien: git add crap.c vista.c... Ganze Verzeichnisse auch möglich: git add verzeichnis1 verzeichnis2... Neu hinzugekommene Dateien müssen aber explizit eingetragen werden Nur Quelldateien unter Versionsverwaltung stellen, keine ausführbaren Programm- oder Objektdateien! Grundlagen Änderungen eintragen 1 git commit -a 2 Beschreibung der Änderung in Editor eingeben Erste 50 Zeichen in der ersten Zeile: Kurzbeschreibung Nach Leerzeile: Ausführliche Erklärung Leere Beschreibung bricht Vorgang ab 3 Empfehlung: Eine Eintragung sollte genau eine komplette Änderung beschreiben, nicht mehr, nicht weniger! Gilt insbesondere bei Zusammenarbeit mit mehreren Entwicklern!

Grundlagen Ausgabe des Projektlogs 1 git log 2 Beispieleintrag: commit 2255 b831f19a31b8aa701f0e08f... Author : < mrsteven@gmx. de > Date : Wed Mar 18 18:04:02 2009 +0100 Beispiel zu diff Grundlagen Unterschiede zwischen Änderungen anzeigen Änderungen seit letztem commit : git diff Vergleich zweier Eintragungen: git diff schluessel1..schluessel2 Schlüssel entsprechen denen aus dem Log Z.B. Vergleich der zwei vorletzten Versionen: git diff HEAD~2..HEAD~1

Grundlagen Noch nicht eingetragene Änderungen verwerfen Änderungen im Arbeitsverzeichnis, die noch nicht mit git commit -a ins Repository eingetragen wurden, können einfach verworfen werden Befehl: git reset --hard HEAD Betroffene Dateien sollten dabei im Editor geschlossen sein Grundlagen Einzelne Änderung rückgängig machen Befehl: git revert schluessel Falls dabei Konflikte entstehen (gleiche Zeile wurde später erneut geändert) müssen diese von Hand aufgelöst werden

Grundlagen Was sind Tags? Kennzeichnungen für bestimmten Entwicklungsstand Beispielsweise: Release, Beta-Version, zum Abholen durch anderen Entwickler bereiter Stand, sonstiger Meilenstein Gleichzeitig Kurzschreibweisen für Commit-Schlüssel Beispiel: git log v1.0..v1.1 Grundlagen Anlegen, Auflisten und Löschen von Tags Anlegen mit git tag tagname stand Stand kann wieder Zweigname oder Commit-Schlüssel sein - oder leer für die aktuelle Version des ausgewählten Zweiges Beispiel: git tag v1.0 Liste aller Tags: git tag Tag löschen: git tag -d v1.0 Löscht nur das Tag (den Namen), keine Commits!

Arbeiten mit Entwicklungszweigen Zweige allgemein Empfohlen wenn sich die Entwicklung an einer bestimmten Stelle verzweigt Testen neuer Ideen Aufteilen der Arbeit auf mehrere Personen Zweige ( branches ) können zu einem späteren Zeitpunkt wieder zusammengeführt werden ( merge ) Arbeiten mit Entwicklungszweigen Zweige in Git Mit Git schnell und einfach Das Killerfeature von Git Bei SVN z.b. nur auf dem Server möglich, keine lokalen Zweige master : Hauptentwicklungszweig des Repositories

Arbeiten mit Entwicklungszweigen Arten von Zweigen Lokale Zweige ( topic branches ) Remote Branches Arbeiten mit Entwicklungszweigen Lokale Zweige erzeugen An aktuellem Entwicklungsstand: git branch mybranch Von bestimmter Stelle starten: git branch mybranch startpunkt Startpunkt kann sein: Anderer Zweig, dann wird der derzeitige Stand dieses Zweiges als Basis verwendet Schlüssel oder Tag eines Commits

Arbeiten mit Entwicklungszweigen Wechseln des aktuellen Zweiges 1 Anzeigen aller Zweige: git branch 2 Umschalten auf anderen Zweig: git checkout otherbranch Arbeitsverzeichnis sollte sauber sein, d.h. keine noch nicht mit git commit -a eingetragenen Änderungen Auch hier wieder: Dateien vorher schließen! Arbeiten mit Entwicklungszweigen Zusammenführen von Zweigen 1 Zum Zielzweig wechseln: git checkout targetbranch 2 Änderungen aus Quellzweig übernehmen: git merge sourcebranch Statt Angabe eines Zweiges auch Schlüssel möglich, dann werden nur die Teile bis zu diesem Schlüssel übernommen 3 Falls nötig Konflikte auflösen

Arbeiten mit Entwicklungszweigen Einmal tief durchatmen - Lösen von Konflikten 1 Dateien, in denen Konflikte auftraten von Hand editieren (Stellen sind markiert) 2 Möglichkeiten: Nach dem Editieren konfliktfreie Version übernehmen: git commit -a Vorgang abbrechen: git reset --hard Gemeinsames Arbeiten über öffentliche Repositories : Öffentliche Repositories Nötig, da Rechner der Projektbeteiligten normalerweise nicht immer erreichbar Voraussetzung: Ein Server auf den alle Teammitglieder Zugriff haben Einfachste Lösung: Server mit SSH, passende Dateirechte für das Repository

Gemeinsames Arbeiten über öffentliche Repositories Öffentliches Repository erstellen # auf Server newgrp projektgruppe mkdir myproject. git cd myproject. git git init -- bare -- shared = group Erzeugt ein Repository, in das die Unix-Benutzergruppe projektgruppe schreiben kann Zentraler Server Gleiches Vorgehen wie bei SVN möglich --bare verhindert, dass das Verzeichnis gleichzeitig als Arbeitskopie dient Projektdateien nicht direkt ohne Git sichtbar Sinnvoll bei Repositories, auf die nur von anderen Rechnern zugegriffen wird (braucht weniger Speicher) Gemeinsames Arbeiten über öffentliche Repositories Lokale Kopie eines Repositories erstellen git clone ssh :// gasts@uranus2. hs - weingarten. de /\ home / PUB / Stud / Stud / gasts / testrepo. git Kopiert den aktuellen Entwicklungsstand von...testrepo.git auf den lokalen Rechner Zweige des Originals sind als Remote Branches unter origin/xyz erreichbar Nur master -Zweig des Servers wird mit lokalem Zweig verbunden, den Rest muss man explizit lokalen Zweigen zuordnen

Gemeinsames Arbeiten über öffentliche Repositories Änderungen vom Server in lokalen Zweig übernehmen git checkout master git pull origin Holt sich die Änderungen aus dem master -Zweig des Servers und versucht diese zu übernehmen Bei Konflikten gleiches Vorgehen wie beim Verschmelzen von lokalen Zweigen Im Wesentlichen das gleiche wie svn update bei Subversion Gemeinsames Arbeiten über öffentliche Repositories Änderungen in lokalen Zweigen an den Server übermitteln Im Gegensatz zu SVN werden Änderungen bei git commit -a nicht automatisch an den Server geschickt! Befehl dafür: git push origin Entsprechung für svn commit: git commit -a && git push origin Falls es hierbei Konflikte gibt muss vorher der lokale Zweig mit git pull origin auf den neuesten Stand des Servers gebracht werden commit vor push nicht vergessen! Empfehlung: Nur in mit git init --bare angelegte Verzeichnisse pushen

Gemeinsames Arbeiten über öffentliche Repositories Remote Branches Benötigt zum Verfolgen von Änderungen in Zweigen auf anderen Rechnern Kein direkter Schreibzugriff - erst mit lokalem Zweig zusammenführen Beim Klonen von Repositories: Remote Branches für alle Zweige der Quelle Jedoch wird nur der lokale master mit dem der Quelle verknüpft! Gemeinsames Arbeiten über öffentliche Repositories Zusätzliche Verknüpfungen zu Remote Branches Will man mit weiteren Remote Branches arbeiten, muss man diese mit lokalen Zweigen verbinden Neuen lokalen Zweig anlegen, der dem Remote Branch experimental aus der Quelle verbunden ist: git branch myexperimental origin/experimental Danach die übliche Vorgehensweise mit git pull und git push

Gemeinsames Arbeiten über öffentliche Repositories Beispiel git branch m yexperim ental origin / experimental git checkout myexpe rimenta l git pull # editieren git commit -a git push Verteilte Entwicklung Verteilte Entwicklung Bisher: Ähnliches Vorgehen wie bei SVN Nur ein öffentliches Repository wird verfolgt (origin) Ein zentraler Server, auf den alle Änderungen geschrieben werden Verteilte Entwicklung: Änderungen aus mehreren Repositories verfolgen und einpflegen Meistens nur lesender Zugriff auf fremde Repositories Beispiel:

Verteilte Entwicklung Mit weiterem Repository verbinden # in Repository server git remote add logger \ ssh :// ranaldol@uranus2.hs - weingarten.de/ home / PUB / \ Stud / Stud / sysprog21 / logger. git git fetch logger Fügt das angegebene Repository als logger hinzu Zweite Zeile erzeugt Remote Branches ( logger/xyz ) und bringt diese lokal auf den neuesten Stand Verteilte Entwicklung Übernehmen von Änderungen 1 Zu Zielzweig wechseln, falls nötig: git checkout master 2 Remote Branches updaten: git fetch logger 3 Änderungen ansehen: git diff HEAD..logger/master 4 Übernehmen: git merge logger/master

Quellen, weitere Informationen Quellen und weitere Informationen Allgemein Git Homepage: http://git-scm.com/ Git User Manual: http://www.kernel.org/pub/software/ scm/git/docs/user-manual.html Everyday GIT with 20 Commands Or So: http://www. kernel.org/pub/software/scm/git/docs/everyday.html man git engl. Wikipedia: http://en.wikipedia.org/wiki/git_(software) Zweige auf Server anlegen Artikel bei Zorched / One Line Fix: http://www.zorched.net/2008/04/14/ start-a-new-branch-on-your-remote-git-repository/