Versionsverwaltung mit git

Ähnliche Dokumente
Medieninformatik Praktikum. Jens Rademacher

Software Engineering

Änderungen verwalten mit git

Git-Grundlagen für Entwickler. Thomas Claudius

Versionsverwaltung mit Eclipse. PR1 - Medizinische Informatik (IMB) Dennis-Immanuel Czogalla

Prof. Dr. Marko Boger. Prof. Dr. Christian Johner. Versionsmanagement

Semesterprojekt Entwicklung einer Suchmaschine für Alternativmethoden zu Tierversuchen. Versionierung und Bugtracking mit GitHub

Versionsverwaltung mit SVN

Tutorium SS17 EINFÜHRUNG + BREAKOUT

Enes Kurnaz, Oliver Nagel Institut für Mathematik und Informatik. Versionsverwaltung mit Git

Einführung zu Git. Das Nötigste für die Studienarbeit im Modul Datenkommunikation. Ege Inanc

Versionsverwaltung. Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner

Versionierung und Bugtracking mit Git(Hub)

Einführung in Git. master. Initial commit

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

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

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

Programmierkurs. Steffen Müthing. November 9, Interdisciplinary Center for Scientific Computing, Heidelberg University

git Änderungen verwalten mit git

Git. Dezentrale Versionsverwaltung im Team - Grundlagen und Workflows. von René Preißel, Bjørn Stachmann. 2., aktualisierte und erweiterte Auflage

Praktische Einführung in die Versionsverwaltung mit Eclipse

Apache Subversion (SVN)

Praktikum Ingenieurinformatik (PI)

Programmieren 1 11 Versionsverwaltung mit Git - Grundlagen -

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

Von SVN zu Git. Daniel Willmann cbna

Dokumentenverwaltung mit CVS eine Einführung

Konfigurationsdateien mit Git verwalten

Verteilte Versionskontrolle mit. Einführung und Nutzung von SVK FrOSCon 24./25. Juni 2006

Versionsverwaltung mit Git

Apache Subversion (SVN)

Apache Subversion (SVN)

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

Revisionskontrollsystem GIT

Apache Subversion (SVN)

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

Einführung in Verteilte Versionskontrollsysteme. am Beispiel von Git

git Datamining und Sequenzanalyse Markus Fleischauer, Kai Dührkop

Fakultät für Informatik Praktische Einführung in die Versionsverwaltung mit Eclipse

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

Moodle aktuell halten mit Git

Überblick. Middleware Cloud Computing Übung. Übungsaufgaben. Termine und Ansprechpartner. Organisatorisches

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

Eine Einführung in das verteilte Quelltextverwaltungssystem Git

Revisionskontrolle mit GIT

Brauche ich ein DVCS?

Versionsverwaltung von Softwareartefakten. 21. Oktober 2014

Middleware Cloud Computing Übung

Versionsverwaltung mit Git

Programmieren 2 05 Versionsverwaltung mit Git

Versionsverwaltung mit git

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

NT-Seminarvortrag am 11. Dezember Einführung in die Versionsverwaltung CVS. von Gordon Cichon

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

Vorlesung Unix-Praktikum

Einstieg in Git. Lukáš Kubánek

Mercurial. or how I learned to stop worrying and love the merge. Ted Naleid IAIK

Fakultät für Informatik Praktische Einführung in die Versionsverwaltung mit Eclipse

Versionsverwaltung mit GIT

Softwareentwicklung I (IB) Versionsverwaltung mit Git

Programmieren Vorkurs

: Einführung in die Programmierung Übungsblatt 1

Einführung in Subversion

Das Tübinger Softwareprojekt

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Software Engineering in der Praxis

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Einführung in Subversion

Linux Cafe Referent: Bernd Strößenreuther

2 Erste Schritte mit der Kommandozeile

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

Übung 00. Allgemeine Hinweise, Vergleich Java C++, Einführung in Version Control Systems

Source Code Verwaltung mit Git

Igitt?! Git für Anfängerinnen und Anfänger Linux höchstpersönlich.

Gitting started. Christian Neukirchen. 14dec2011

Semesterprojekt Implementierung eines Brettspiels (inklusive computergesteuerter Spieler) Versionierung und Bugtracking mit GitHub

git Alexander Bernauer Rico Schiekel

Versionsverwaltung mit Git. Eine Einführung ins Source Code Management

Spiel, Spaß und Spannung mit Git

Software(technik)praktikum: SVN-Tutorial

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Git in großen Projekten

Einführung in Subversion

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

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

Vorlesung Unix-Praktikum

Apache Subversion (SVN)

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

Git eine kurze Einführung

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

Versionskontrolle mit Subversion

DIY Individual Prototyping and Systems Engineering

SVN in use. Roger Burkhardt Fachhochschule Nordwestschweiz Hochschule für Technik Institut für Geistes- und Naturwissenschaft

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

Einführung in Subversion. Tutorium SWP

Transkript:

Versionsverwaltung mit git

Versionsverwaltung Versionsverwaltungssysteme verwalten Dateien und zeichnen alle Änderungen an den Dateien im Laufe ihrer Entwicklung auf. alte Versionen sind stets verfügbar jede Änderung ist dokumentiert Entwicklung wird nachvollziehber Koordination mehrerer Entwickler gleichzeitiges Arbeiten an allen Teilen des Projekts Zusammenführung von Änderungen an einem Projekt Welche Versionen welcher Dateien passen zusammen?

Versionsverwaltung Hin und her Kopieren von Dateien mit E-Mail oder Dropbox ist nicht geeignet. class X { public int x; } Alice class X { private int x; public int getx () { return x; }; } Bob class X { int x; public void inc () { x++; }; } Kopieren der neuesten Version überschreibt eine der Änderungen stillschweigend

Versionsverwaltungssysteme Software wird mithilfe von Versionsverwaltungssystemen (engl. Version Control System) entwickelt. Beispiele: CVS, SVN, git, Mercurial,... Verwaltung von Datei- und Projektversionen Integration von Änderungen verschiedener Entwickler Änderungen nachvollziehbar machen Erkennen von Konflikten

git Im Praktikum verwenden wir git entwickelt von Linus Torvalds u.a. für den Linux Kernel weit verbreitet, auch für kleine Projekte Möglichkeiten zur Benutzung von git: Kommandozeile integriert in Eclipse, IntelliJ oder Netbeans andere GUIs Die grundlegenden Konzepte sind gleich.

Versionsverwaltung mit git Ein git-repository verwaltet verschiedene Revisionen eines Projekts. Revision 1 Revision 2 Revision 3... Datei A A.2 A.3... Datei B B B.2... Datei C C...

Versionsverwaltung mit git Revisionen werden manuell angelegt. Arbeitsablauf: Dateien ändern und/oder neu angegen/ Dateien für die nächste Revision vormerken. (staging) Neue Revision anlegen (commit). Die neue Revision wird in einem kurzen Text (commit-message) kurz beschrieben. Revision mit anderen Repositories abgleichen Fremde Revision herunterladen Eigene Revision verschicken

Anlegen eines Repositories Kommandozeile: git init macht das aktuelle Verzeichnis zu einem (leeren) git Repository eventuell existierende Dateien werden ignoriert git speichert alle Repository-Daten in einem (versteckten) Unterverzeichnis.

Arbeitsablauf: git add und git commit Dateien bearbeiten oder anlegen (wie üblich) Inhalte zur nächsten Revision hinzufügen git add datei1 git add datei2... Revision fertig stellen git commit -m "kurze Beschreibung der Revision" Eine commit-message ist notwendig. Ruft man nur git commit auf, so wird ein Editor gestartet, in dem man die Nachricht eingeben kann.

Revisionshistorie anzeigen: git log Kommandozeile: git log Ausgabe: commit b5902ac4d86bdb84e82b453492ff7650028c4567 Author: Ulrich Schoepp <schoepp@tcs.ifi.lmu.de> Date: Sun Oct 18 12:13:20 2015 +0200 Text uebersetzt commit 6d118f0d2d2f5f3b97f3b032a2d3ccb3c8622e40 Author: Ulrich Schoepp <schoepp@tcs.ifi.lmu.de> Date: Sun Oct 18 11:36:35 2015 +0200... Jede Revision hat einen eindeutigen Namen (z.b. b5902...). Die aktuelle Revision heißt auch HEAD.

Revisionen zurückholen: git checkout Kommandozeile: git checkout revisionsname Beispiel: Gehe zur ersten Revision: git checkout 6d118f0 Zurück zur aktuellsten Revision: git checkout master N.B. master bezeichnet den Hauptzweig des Repositories. Es gibt auch Nebenzweige, die wir hier nicht betrachten.

Status: git status Anzeigen des Status aller Dateien. git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: src/test/main.java Untracked files: (use "git add <file>..." to include in what will be committed) src/test/point.java no changes added to commit (use "git add" and/or "git commit -a")

Anzeigen von Änderungen: git diff Alle Änderungen seit der letzten Revision: git diff Änderungen an einer Datei seit der letzten Revision: git diff dateiname Änderungen seit einer bestimmten Revisionen: git diff rev1 git diff HEAD@{yesterday} Änderungen zwischen zwei Revisionen: git diff rev1..rev2

Verteilte Versionsverwaltung Daten können zwischen verschiedenen git-repositories ausgetauscht werden. clone: duplizieren eines git-repositories in einem eigenen Verzeichnis : neue Revisionen von einem anderen Repository übernehmen push: neue Revisionen auf ein anderes Repository übertragen Bei der Entwicklung hat jeder ein eigenes Repository. Die Daten werden zwischen den Repositories ausgetauscht.

Remote Repositories Kopieren eines Repositories: git clone url Lädt den Inhalt eines gesamten git-repositories von url, inklusive der kompletten Versionsgeschichte. Es wird eine Referenz auf das remote Repository gespeichert. Diese hat oft den Namen origin. Beispiel: Dienste wie github oder gitlab bieten die zentrale Speicherung von git-repositories an. Zum Zugriff auf das Repository wird eine url für git clone angegeben.

Remote Repositories Normales Arbeiten mit dem git-repository: Änderungen,, Änderungen,,... Neue Revisionen können vom remote Repository in das lokale übernommen werden. git Hat man Schreibzugriff auf das remote Repository, so kann man die neuen Revisionen dort hochladen. git push Dies ist nur möglich, wenn das lokale Repository auf dem neuesten Stand ist (evtl. nötig).

Möglicher Arbeitsablauf Entwickler 1 Entwickler 2 Entwickler 3 clone clone clone Hauptrepository (z.b. gitlab)

Möglicher Arbeitsablauf Entwickler 1 Entwickler 2 Entwickler 3 Arbeit Arbeit push Arbeit Arbeit push Arbeit Arbeit push Hauptrepository (z.b. gitlab)

Konflikte Bei der parallelen Arbeit an einem Projekt kann es zu Konflikten kommen. class X { public int x; } Alice Bob class X { private int x; public int getx () { return x; }; } class X { int x; public void inc () { x++; }; }

git führt ein merge aus Hauptrepository... r1 Alice Bob r1...... r1

git führt ein merge aus Hauptrepository... r1 Alice Bob r1 r2...... r1

git führt ein merge aus Hauptrepository... r1 Alice Bob r1 r2...... r1 r3

git führt ein merge aus Hauptrepository... r1 r2 Alice Bob r1 r2...... r1 r3 push

git führt ein merge aus Hauptrepository... r1 r2 Alice Bob r1 r2...... r1 r3 push r2

git führt ein merge aus Hauptrepository... r1 r2 Alice Bob r1 r2...... r1 r3 merge r1 (r2, r3) push r2

git führt ein merge aus Hauptrepository... r1 r3 merge r1 (r2, r3) r2 Alice Bob r1 r2...... r1 r3 merge r1 (r2, r3) push push r2

Konflikte Bei einem merge können Konflikte auftreten, wenn es in beiden Revisionen Änderungen an der gleichen Stelle gibt. git kennzeichnet die Konflikte in der Datei selbst. class X { <<<<<<< HEAD private int x; public int getx() { return x; }; ======= public int x; public void inc() { x++; } >>>>>>> 41bff37efee048db1ef40c779e63a1686028af97 } Konflikte müssen manuell behoben werden: Ersetze alle markierten Teile durch den gewünschten Text. Das Merge wird mit abgeschlossen.

Konflikte Bei einem merge können Konflikte auftreten, wenn es in beiden Revisionen Änderungen an der gleichen Stelle gibt. git kennzeichnet die Konflikte in der Datei selbst. class X { private int x; public void inc() { x++; } } Konflikte müssen manuell behoben werden: Ersetze alle markierten Teile durch den gewünschten Text. Das Merge wird mit abgeschlossen.

Zusammenfassung: git Repository anlegen oder klonen (nur einmal) git init oder git clone <url> Dateien für die nächste Revision vormerken git add <dateiname> Neue Revision anlegen git commit Fremde Revision herunterladen git git Eigene Revision verschicken git push Spezielle Revision laden git checkout <versionsname>

Allgemeine Hinweise Repository regelmäßig mit aktualisieren viele kleine Commits push nur wenn Projekt in konsistentem Zustand aussagekräftige Commit-Nachrichten alten Programmcode nicht auskommentieren; gleich löschen

git im Praktikum Alle Teilnehmer registrieren sich auf: https://gitlab.cip.ifi.lmu.de Für jedes Projekt wir ein eigenes git-repository angelegt mit Namen <gruppenname>-<nachname>-<vorprojekt> Repository freigegeben für: Stephan Barth, Steffen Jost und den jeweiligen Gruppentutor. Vollzugriff erforderlich! Members > Add Members als Developer Abgabe Einzelprojekte erfolgt automatisch über das freigegebene Repository!

.gitignore Vorsicht, nicht alle Dateien ins Repository einstellen! Ins Repository gehören: Alle.java und.fxml Dateien Niemals ins Repository: keine IDE-Dateien (z.b. bei intellij nicht.idea) keine Konfigurationsdateien mit absoluten Pfadangaben keine temporären/erzeugten Dateien In einer Datei.gitignore kann angegeben werden, welche Dateien und Pfade von git ignoriert werden sollen. Vorlage auf SEP Homepage verfügbar.

git für Gruppenprojekte Für jedes Gruppenprojekt wird erneut jeweils ein frisches Projekt in gitlab angelegt: <gruppenname>-<projektname> Ein Gruppenmitglied erstellt es und gewährt anderen Gruppenmitgliedern Schreibzugriff, Tutoren Lesezugriff Members > Add Members Gruppenmitglieder: git clone <url des projekts> Gruppenrepsitory auf gitlab.cip.ifi.lmu.de jedes Gruppenmitglied hat ein lokales Repository

git mit intellij oder Eclipse Anlegen eines gemeinsamen Eclipse-Projekts: (Details siehe Screencast auf Praktikumshomepage) Einmal für jede Gruppe: In Editor ein Java-Projekt anlegen Projektdateien in ein lokales git-repository einchecken.gitignore nicht vergessen, ggf. anpassen git-repository auf gitlab.cip.ifi.lmu.de anlegen Push vom lokalen git-repository auf das gitlab-repository Rest der Gruppe: Import des Java-Projekts direkt von gitlab das Hauptrepository wird dabei gecloned

git mit intellij Durch die Entwicklungsumgebung vereinfachen sich viele Arbeitsschritte: z.b. bietet intellij zwei Knöpfe für und push an, wobei letzterer mit Hilfe der Dialoge eine Kombination von add + commit + push ist. Auch Merging im Falle von Konflikten wird bequem grafisch dargestellt. Status der Dateien ist Farbcodiert: Rot Datei nicht im Repository Grün Datei added, aber noch nicht committed Blau Datei seit letzter Revision geändert, noch nicht committed Schwarz Datei im Repository und unverändert