65
Projektverwaltung maven git Sascha Just Softwarepraktikum 2014

maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Projektverwaltung

maven git

Sascha JustSoftwarepraktikum 2014

Page 2: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

‣ Maven ist ein Werkzeug zur Verwaltung von Java-Projekten

‣ Konvention statt Konfiguration

‣ Abhängigkeiten (benötigte Bibliotheken) werden automatisch verwaltet

mavenProjektverwaltung mit

Page 3: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

pom.xml

Project Object Model<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Das Project Object Model (POM) beschreibt das Projekt.

Page 4: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

pom.xml

Project Object Model<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Page 5: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

pom.xml

Project Object Model<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Page 6: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

pom.xml

Project Object Model<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Page 7: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Abhängigkeiten

junit

junit

4.11

junit-4.11.jar

junit-4.11.jar.sha1

junit-4.11.pom

junit-4.11.pom.sha1

repository<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>

Page 8: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Verzeichnisstruktur

pom.xml POM Datei im Projekt-Verzeichnis.

src/main/java/ Java-Quelldateien.

src/main/resources/ Zur Laufzeit benötigte Ressourcen (z.B. Bilder).

src/test/java/ Java-Quelldateien für Unit-Tests.

src/test/resources/ Dateien welche zum Testen benötigt werden.

target/ Von Maven generierte Dateien.

Page 9: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 10: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Eclipse Projektdateien.

Page 11: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 12: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote
Page 13: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Tests run: 12, Failures: 1, Errors: 0, Skipped: 0

Fehlgeschlagene Assertion in GitRepositoryTest.

Page 14: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

./target/surefire-reports/

TEST-org.mozkito.versions.git.GitRepositoryTest.xml

org.mozkito.versions.git.GitRepositoryTest.txtMaven Ausgabe des Testlaufs.

Konfigurationsbeschreibung des Testlaufs in XML.

Maven Testergebnisse

Page 15: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 16: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 17: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 18: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>

$HOME/.m2/repository/com.mycompany.app/my-app/1.0-SNAPSHOT/

‣ my-app-1.0-SNAPSHOT.jar ‣ my-app-1.0-SNAPSHOT.pom

maven install

Page 19: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Wichtige Goals

eclipse:eclipse Erzeugt ein Eclipse-Projekt.

test Führt alle Unit-Tests aus.

compile Kompiliert das Projekt.

assembly:assembly Packt ein Archiv für die Auslieferung.

install Kopiert das Projekt in das lokale Repository.

site Generiert eine HTML-Seite mit Projekt-Berichten. (z.B. JavaDoc, Checkstyle, FindBugs, PMD, etc…)

Page 20: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote
Page 21: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote
Page 22: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

gitVersionsverwaltung mit

Page 23: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Warum Versionsverwaltung?

‣ Nachverfolgen von Änderungen (Projektgeschichte) ‣ Zusammenführen von Änderungen ‣ Dokumentation / Archivierung von Zwischenzuständen

Page 24: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Herkömmliche Versionsverwaltungssysteme

‣ CVS, Subversion (SVN) ‣ Ein zentraler Repositoryserver ‣ Jeder Commit wird zentral gespeichert ‣ Lineare Revisionskette ‣ Probleme: • kein Netzwerkzugriff? • kein Schreibrecht? • Branch&Merge komplex

Page 25: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Verteilte Versions-verwaltungssysteme

‣ Bazaar, Mercurial, Git

‣ jeder Entwickler hat eine Kopie des gesamten Repositories (Historie des Projekts)

‣ ein oder mehrere zentrale Repositories sind üblich zur Synchronisation

‣ schnelle Analysen möglich (log, bisect)

‣ verteiltes Arbeiten (github)

Page 26: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits

‣ die wichtigsten Objekte in Git ‣ bestehen aus:

• Autor-Informationen • Datum des Commits • aktueller Stand des Repositories • Parent-Commits

‣ identifiziert durch SHA1-Hash über diese Informationen

Page 27: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote
Page 28: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote
Page 29: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits

Drei verschiedene Typen von Commits: ‣ Root-Commits (kein Parent) ‣ normale Commits (ein Parent) ‣ Merge-Commits (zwei oder mehr Parents)

Page 30: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits

Root

Merge

Zeit

Page 31: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits

Commits können benannt sein ‣ Branches ‣ Tags ‣ spezielle Referenzen wie HEAD

Page 32: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Branches

‣ Branches kennzeichnen Commits ‣ Unterscheidung zwischen lokalen Branches (“master” oder

“featureX”) und remote-tracking Branches (“origin/master” oder “sopra/anotherFeature”)

‣ genau ein Branch ist “ausgecheckt”, d.h. das aktuelle Arbeitsverzeichnis enthält den Stand dieses Branches • dieser Branch ist durch HEAD referenziert • neuer Commit wird automatisch HEAD

Page 33: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Branches

A B C

masterHEAD

A B C D

masterHEADcommit

Page 34: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Branches verwalten

• neuen Branch aus aktuellem HEAD: $ git branch newFeature

A B C D

masterHEAD

A B C D

newFeaturemasterHEAD

Page 35: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• in den neuen Branch wechseln (auschecken): $ git checkout newFeature

A B C D

HEAD

A B C D

newFeaturemaster

HEADnewFeaturemaster

Branches verwalten

Page 36: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• beides in einem Schritt: $ git checkout -b newFeature

A B C D

masterHEAD

A B C D

newFeaturemaster

HEAD

Branches verwalten

Page 37: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• neuer Commit: $ git commit -m “starting new feature”

A B C D

masterHEAD

A B C D

newFeaturemaster

HEAD

E

newFeature

Branches verwalten

Page 38: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits vorbereiten

• zu committende Änderungen werden in der Staging Area (in git auch “Index” genannt) vorbereitet

• wichtiger Unterschied zu SVN: nicht Dateien, sondern einzelne Änderungen werden gestaged!

• Zustand des Index überprüfen: $ git status

• vorbereitete Änderungen committen: $ git commit -m “fixed bug #23”

Page 39: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits vorbereiten

Branch

Index

Arbeitsverzeichnis

git add [-u] [-A] git rm [--cached] git mv

git commitgit reset

git checkout

git checkout HEAD

git commit -a

Page 40: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits vorbereiten

• Zustand des Index überprüfen: $ git status # On branch master # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage)# # modified: changedFile1 # new file: newFile1 # deleted: removedFile1 # # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)# # modified: changedFile1 # deleted: removedFile2 # # Untracked files: # (use "git add <file>..." to include in what will be committed)# # newFile2

Page 41: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Commits vorbereiten

• Falls Index und/oder Arbeitsverzeichnis total durcheinander geraten: $ git reset --hard HEAD

• Setzt sowohl Index als auch Arbeitsverzeichnis zurück auf den Stand aus HEAD

• Jede nicht committete Änderung ist verloren!

Page 42: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Lokales Repository anlegen

• erste Möglichkeit:

• leeres Repository erzeugen: $ git init

• Root-Commit erzeugen: $ git add file1 $ git commit -m “initial commit”

• zweite Möglichkeit:

• Repository klonen: $ git clone sopra:gruppe8

Page 43: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Repository Klonen

A B C D

Remote

masterHEAD

A B C D

Lokal

origin/master masterHEAD

olderState origin/olderState

Page 44: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Remotes

• beliebig viele Remotes definierbar

• Standardname nach dem Klonen: origin

• Remote hinzufügen: $ git remote add sopra sopra:gruppe8 $ git remote add backup github:mySopraBackup

• Remote löschen: $ git remote rm backup

• Remote umbenennen: $ git remote rename backup github

Page 45: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Remotes

• git unterstützt viele Protokolle, um Remotes anzusprechen:

• ssh

• git

• http / https

• ftp / ftps

• rsync

• file

• alle Details in den git manpages: $ git help clone

Page 46: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Remote-Tracking Branch auschecken: $ git checkout -t origin/olderState old

Remote-Tracking Branches

A B C D

origin/mastermasterHEAD

A B C D

origin/mastermaster

HEADorigin/olderState origin/olderState

old

Page 47: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Remote updaten: $ git fetch origin

Änderungen übertragen

A B C

origin/mastermasterHEAD

A B C D

masterHEAD

E

origin/master

FETCH_HEAD

Page 48: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Änderungen übernehmen (mergen): $ git merge origin/master

• einfacher Fall: fast-forwardaktueller HEAD ist Vorfahre des zu übernehmenden Commits

Änderungen übertragen

A B C D

HEAD

E

origin/master master

A B C D

masterHEAD

E

origin/master

Page 49: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Änderungen übernehmen (mergen): $ git merge origin/master

• schwieriger: echter merge aktueller HEAD ist kein Vorfahre des zu übernehmenden Commits

Änderungen übertragen

A B C

D

masterHEAD

E

origin/master

A B C

D

masterHEAD

E

origin/master

F

Page 50: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Remote updaten und Änderungen übernehmen in einem Schritt: $ git pull origin/master

• äquivalent zu: $ git fetch origin $ git merge origin/master

Änderungen übertragen

Page 51: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Fehler vermeiden und Tipparbeit sparen: “upstream” branches setzen

• gilt anschließend als Standard für pull, merge, ... $ git merge anstatt $ git merge origin/master

Upstream Branches

Page 52: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• durch viele Befehle automatisch gesetzt: $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8

• manuelle Konfiguration: $ git config branch.myFeature.remote github $ git config branch.myFeature.merge myFeature

Upstream Branches

Page 53: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• HEAD in ein Remote übertragen: $ git push origin master:master

• wenn upstream entsprechend gesetzt ist: $ git push

Änderungen übertragen

A B C D

HEADorigin/master

master

A B C D

origin/master

HEAD master

Page 54: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• abgewiesen, wenn lokaler Branch kein Nachfahre des Remote Branches:$ git push ! [rejected] master -> master (non-fast-forward)

• in diesem Fall: erst pull (erzeugt merge)

Änderungen übertragen

A B C D

origin/master

HEAD master

F

E G

Page 55: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• bestimmte Branches übertragen: $ git push origin featureA:myNewFeature

Änderungen übertragen

A B C D

HEADorigin/myNewFeature

featureA

A B C D

master origin/master

HEAD featureA

master origin/master

Page 56: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• Remote Branches löschen: $ git push origin :myNewFeature

Änderungen übertragen

Page 57: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• bei jedem Merge können Konflikte auftreten

• in beiden Branches wurde eine Datei an der gleichen Stelle geändert

• eine Datei wurde in einem Branch modifiziert, aber im anderen gelöscht

• beide Branches haben eine Datei mit dem gleichen Namen angelegt

Konflikte auflösen

Page 58: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• git meldet Konflikte: $ git pull [...] Auto-merging file1 CONFLICT (add/add): Merge conflict in file1 Automatic merge failed; fix conflicts and then commit the result. $

• Konflikte von Hand beheben und committen: $ vi file1 $ git add file1 $ git commit

Konflikte auflösen

Page 59: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• sehr ähnlich zu Branches

• kennzeichnen beliebige Commits

• werden i.d.R. nicht mehr verändert

• potenziell GPG-signiert werden

• potenziell mit Nachricht versehen

• git tag r1.0 -m “release 1.0”

Tags

Page 60: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

‣ Branch-Namen: master, origin/featureA

‣ Tag-Namen: r0.8

‣ SHA1-Hash, oder einen eindeutigen Präfix davon: 3c4dd2

‣ Datums-Angabe: master@{1 month ago}

‣ letzte Referenzen eines Branches: master@{5}

‣ Parents eines Branches/Tags/Commits:HEAD^, master^^, master~4

Commits wiederfinden

Mehr dazu in der Git manpage.

Page 61: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• zwischen Arbeitsverzeichnis und Index: $ git diff

• zwischen Index und HEAD: $ git diff --cached

• zwischen Arbeitsverzeichnis und beliebigem Commit: $ git diff master@{yesterday}

• zwischen beliebigen Commits: $ git diff HEAD HEAD^^

Änderungen anzeigen

Page 62: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• listet Vorfahren von HEAD mit Autor, Datum und Nachricht: $ git log

• Stammbaum eines beliebigen Commits: $ git log origin/featureA

Stammbaum anzeigen

Page 63: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

• gewünschten Commit auschecken: $ git checkout 2d3c44

• neuen Branch anlegen: $ git branch lostState

• alten Branch überschreiben: $ git branch -f master

Commits wiederherstellen

Page 64: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

Zentrale Versionskontrolle

update commit commit

update update commitSubversion Repository

Page 65: maven git - Universität des Saarlandes · $ git checkout -t origin/olderState old $ git checkout olderState $ git clone sopra:gruppe8! •manuelle Konfiguration: $ git config branch.myFeature.remote

push

Dezentrale Versionskontrolle

Zentrales Git Repository clone

pull

commit commit

commit

fetch

merge

push