• Keine Ergebnisse gefunden

git Grundlagen Vorlesung 1. git allgemein 2. GitHub 3. git im BSYS Labor 4. git remotes Git Grundlagen Professor Dr.

N/A
N/A
Protected

Academic year: 2022

Aktie "git Grundlagen Vorlesung 1. git allgemein 2. GitHub 3. git im BSYS Labor 4. git remotes Git Grundlagen Professor Dr."

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Professor Dr. Michael Mächtel

git

Grundlagen

Git Grundlagen

git Grundlagen

1. git allgemein 2. GitHub

3. git im BSYS Labor 4. git remotes

(2)

Professor Dr. Michael Mächtel

git Grundlagen

1. git allgemein 2. GitHub

3. git im BSYS Labor 4. git remotes

3

Git Grundlagen

git

Verteiltes Versionsverwaltungs-
 system

Open Source Extrem populär

komplex & kompliziert, aber mächtig

Git /ɡɪt/, noun a stupid or unpleasant man

— Oxford Dictonaries

(3)

Professor Dr. Michael Mächtel

Bedienung

5

Original: im Terminal

Nicht optimal, aber: komplette Macht von Git Wird in dieser Präsentation benutzt

Und „überall im Internet“!

GitHub for Windows

Sehr einfach, hübsch und beschränkt SourceTree (Download)

Wesentlich mehr Funktionen, komplizierter zu bedienen Empfehlung: erstmal im Terminal!

Git Grundlagen

Versionsverwaltung


VCS: Version Control System

Protokolliert Veränderungen an Dateien, mit … Autor

Kurzbeschreibung Zeitstempel Ermöglicht …

Wiederherstellung alter Zwischenstände Paralleles Arbeiten mehrerer Entwickler Analysen der Codebase

„Alternativen“: Mercurial, SVN, CVS, Perforce …

(4)

Professor Dr. Michael Mächtel

Commit

7

Abbildung des ganzen Projekts zu einem Zeitpunkt Ein Commit speichert:

Alle Dateien (komprimiert: Delta vom Vorgänger) Seinen Vorgänger

Textnachricht, Autor, Zeit, … Identifiziert durch Hash (hier: C1, C2, …)

f1f5d1b

2a9ca86 576a5d0

Verzeichnis leer

README.md

src/

hello.rs

test.rs

README.md

src/

hello.rs

data.rs

C1 C2 C3

Git Grundlagen

Das Repository

Aktenordner holen

Ordnernamen merken!

Jede Seite kopieren

Kopien auf Tisch ausbreiten

Working Directory Version Database

„Staging Area“

Zettel kopieren

Kopie in Staging- Area legen

Originalordner kopieren

In Kopie Seiten mit neuer Version aus der Staging Area überschreiben

Neuen Ordner merken

(5)

Professor Dr. Michael Mächtel

Das Repository

9

„Staging Area“

Version Database:

C2

C1 C3

Working Directory:

hello.rs test.rs README

$ git add

$ git commit

$ git checkout

Ordnerstruktur auf Dateisystem

„Blick auf ein Commit“

Enthält alle Commits

Versteckt gespeichert in .git/

Git Grundlagen

Datei Status

Untracked Unmodified

Modified Staged

Git sieht Datei im Dateisystem, tut aber nichts mit ihr.

Datei in Git registriert, gleicht aber dem letzten Commit.

Datei registriert und wurde seit letztem Commit verändert.

Datei wird Teil des nächsten Commits („Ich bin bereit!“)

Jemand hat was auf den Tisch gelegt und niemand weiß Bescheid Frisch kopiert auf dem Tisch Wurde auf dem Tisch verändert

Wurde kopiert und auf die Staging-Area gelegt

(6)

Professor Dr. Michael Mächtel

Datei Status

11 git add

git commit

*edit*

git add

git commit -a

Legt alle veränderten (aber keine neuen!) Dateien in die Staging-Area und führt

git commit aus

Untracked Unmodified

Modified Staged

Git Grundlagen

Typischer Ablauf

Lege Datei hello.rs und bye.rs neu an git add hello.rs bye.rs

git commit

Bearbeite einige Dateien git commit -a

Lege Datei test.rs neu an Bearbeite hello.rs git add test.rs git commit –a …

(7)

Professor Dr. Michael Mächtel

Status anzeigen

git status oft ausführen!

Immer wissen, was los ist.

13

$ git status
 On branch master


Your branch is up-to-date with 'origin/master'.


Changes to be committed:


(use "git reset HEAD <file>""..." to unstage)
 new file: bye.rs


new file: hello.rs


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: Cargo.toml


Untracked files:


(use "git add <file>""..." to include in what will be committed)


test.rs


Git Grundlagen

Wie oft commiten?

Commit sollte atomar sein Projekt sollte kompilieren 
 (keine groben Fehler) Unit-Tests sollten funktionieren Bitte oft, aber bewusst committen!

Commit Nachrichten (‘Ordner Beschriftung’) Zusammenfassung der Änderungen 
 (nicht: „stuff“, “changes”, “blabla” ….) Profi Tipps:

Erste Zeile sehr kurze Zusammenfassung Optional: Durch leere Zeile getrennte weitere

Nicht

git commit -m nutze

n!

(8)

Professor Dr. Michael Mächtel

Ein Blick in den Aktenschrank

15 C2

C1 C3

$ git commit

$ git commit

$ git commit

$ git checkout C2

$ git commit

HEAD

(wurde auf den Tisch ausgecheckt)

C4

Ein Commit kann Vorgänger mehrerer anderer Commits sein

Git Grundlagen

Branches

$ git commit

$ git commit

$ git commit

$ git checkout C2

$ git commit

$ git branch <name>

Erzeugt neuen Branch Zeigt auf den Commit, auf den HEAD zeigt

$ git checkout -b <name>

git branch name und git checkout name

Pointer auf Commit

Hat Namen

‘master’ automatisch

C2

C1 C3

HEAD C4

master

(9)

Professor Dr. Michael Mächtel

Branch mergen / Conflicts

17 hello.rs

fn main() {

<<<<<<< HEAD

println!("Hello Susi");

=======

println!("Hello Willi");

>>>>>>> master }

$ git merge master To Auto-merging src/hello.rs

CONFLICT (content): Merge conflict in src/hello.rs

Automatic merge failed; fix conflicts and then commit the result.

$ git status

# On branch foo

# You have unmerged paths.

# (fix conflicts and run "git commit")

#

# Unmerged paths:

# (use "git add ..." to mark resolution)

#

# both modified: src/hello.rs

#

$ git merge --abort

$ git add src/hello.rs

$ git commit

„Deren“

(zu mergender Br.)

„Meins“

(aktueller Br.)

Git Grundlagen

Aufpassen mit dem Mergen!

Zu viele Merge-Commits vermüllen History Horror-Szenario:

- Bob und Anna starten beim selben Commit - Jeder erstellt einen eigenen commit

- Bob möchte die Änderungen von Anna: git merge anna - Wiederhole:

- Anna erstellt einen weiteren Commit

- Bob möchte nochmal die neuen Änderungen: git merge anna

OH MY GOD!

(10)

Professor Dr. Michael Mächtel

git commit im Detail

Bereitet neuen ‘Aktenordner’ vor:

Alter Ordner (worauf HEAD zeigt) Neue Inhalte aus der Staging-Area Vorgänger ist der Commit, auf den HEAD zeigt Branch, auf den HEAD zeigt, wird auf neuen Commit umgebogen

“Spielen” mit commits und branches ohne Nebenwirkungen:

http://learngitbranching.js.org/?NODEMO

19

Git Grundlagen

Repository erstellen/klonen

git init

Legt neues Repository an Leerer Tisch, leerer Aktenschrank git clone REPO_URL

Kopiert Aktenschrank von angegebenem Repository Checkt speziellen Commit aus („legt auf Tisch“) Vermerkt Quellrepository als origin-Remote

(11)

Professor Dr. Michael Mächtel

git Grundlagen

1. git allgemein 2. GitHub

3. git im BSYS Labor 4. git remotes

21

Git Grundlagen

Verteilte VCS

Computer B*

Computer A

Computer C*

C1 C2

C3

C1 C4

C6

C1

C5 Ich

Willi

Susi git push

git pull

* Oft remote‘s genannt

(12)

Professor Dr. Michael Mächtel

Zentralisierte Entwicklung

23 Developer Developer Developer

Haupt-Repo Jeder Developer kann Code veröffentlichen:


Ungut!

Git Grundlagen

GitHub Workflow

Developer

privat Developer

privat Developer

privat

Haupt-Repo Pull-Request*

„Forks“ auf GitHub

Auf lokalem PC

* Vom Maintainer wird Code Review durchgeführt & CI Dienste werden ausgeführt

Developer public

Developer public

Developer public

pull / push pull / push pull / push

(13)

Professor Dr. Michael Mächtel

github ssh key

25

Um komfortabel mit github zu arbeiten, empfiehlt es sich einen ssh key zu erstellen

Für jeden Rechner, von welchem ein Zugriff auf die Repositories geschehen soll, muss ein ssh key generiert werden.

Informationen dazu:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it- to-the-ssh-agent/

SSH Key mit PuttyGen erstellen:

http://www.laub-home.de/wiki/SSH_Key_mit_PuttyGen_erstellen

Git Grundlagen

git Grundlagen

1. git allgemein 2. GitHub

3. git im BSYS Labor 4. git remotes

(14)

Professor Dr. Michael Mächtel

github im BSYS Labor

27 Lokal geklont Lokal geklont

Haupt-Repo der Gruppe GH/htwg-syslab-bsys/bsys-ss17—grp0

Fork Student A

GH/StudentA/bsys-ss17-grp0 Fork Student B GH/StudentB/bsys-ss17-grp0

Tutor korrigiert und akzeptiert bei Auswertung

Nur immer ein PR pro Gruppe pro Aufgabe!

Lokal geklont Lokal geklont

a b

a b

Git Grundlagen

Ablauf im BSYS Labor

Anmeldung in 2er Gruppe in Moodle

Mit Einladungslink aus Forum erstellen Sie Ihre Gruppe Achtung: Anweisungen für Gruppennamen beachten Mindestens einer forkt das Haupt-Repo

Wiederhole pro Abgabe Homework:

Aufgaben bearbeiten, comitten und pushen - ins geforkte Repo (Developer-Repo)!

Auf github: PullRequest (PR) für Haupt-Repo erstellen, nachdem Sie die Aufgaben alle bearbeitet haben und abgeben wollen.

(15)

Professor Dr. Michael Mächtel

github Anmeldung

29

Nach Annahme des Einladung Links Gruppe erstellen (grpN)

Git Grundlagen

Pull Request Vorbereitung

Ablauf

git co -b “Homework-Task1”

neuer Branch zur ‘Abgabe’ wird erstellt switch zu diesem Branch im lokalen Repo

git push "--set-upstream origin AbgabeTask1 dem eigenen Remote (Developer-Repo) den Branch bekannt machen

Auf github den Branch auswählen und einen Pull-Request aufmachen

(16)

Professor Dr. Michael Mächtel

Pull Request erstellen

31

Git Grundlagen

git Grundlagen

1. git allgemein 2. GitHub

3. git im BSYS Labor 4. git remotes

(17)

Professor Dr. Michael Mächtel

git Remotes

Andere Nodes/Klone des Repositories z.B. Original oder Fork auf GitHub Typische Namen für Remotes

origin: Standardname, oft der eigene Fork upstream: oft Bezeichnung für Original-Repository

33

$ git remote -v

origin git@github.com:user/bsys-ss17—grp0.git (fetch) origin git@github.com:user/bsys-ss17-grp0.git (push)

Identifiziert durch URL!

Namen sind nur lokale Kürzel für die URLs

Git Grundlagen

git remote Befehle

Hinzufügen: $ git remote add <name> <url>

Löschen: $ git remote remove <name>

Umbenennen: $ git remote rename <name> <url>

URL-Typen:

https://github.com/user/bsys-ss17-grp0.git (HTTPS) git@github.com:user/bsys-ss17—grp0.git (SSH)

Lokale Remotes ebenfalls möglich! (z.B. ~/my_other_clone/)

(18)

Professor Dr. Michael Mächtel

git remote + upstream

Wie mit Änderungen im Original Schritt halten?

Zusätzlich den upstream mit eintragen

35 Remotes auflisten

$ git remote -v

origin git@github.com:user/bsys-ss17-grp0.git (fetch) origin git@github.com:user/bsys-ss17-grp0.git (push) upstream git@github.com:syslab/bsys-ss17-grp0.git (fetch) upstream git@github.com:syslab/bsys-ss17-grp0.git (push)

Git Grundlagen

Remote Branches

Lokaler „Cache“ von Branches des Remote

Zeigt den Stand, als das letzte mal der Remote kontaktiert wurde

master

HEAD remotes/origin/master

remotes/origin/HEAD

$ git branch

* master

$ git branch -a

* master

remotes/origin/HEAD -> origin/master remotes/origin/master

Remote Branches (remotes/origin/master) Lokale Branches

(master)

(19)

Professor Dr. Michael Mächtel

Remote Branches aktualisieren

„Git Fetch“

Kontaktiert Remote, aktualisiert Remote Branches Lädt alle Commits zur Vervollständigung der History runter

37

Lokal

master

origin-Remote

master backup

origin/master origin/backup

$ git fetch <remote>

Git Grundlagen

Branches mergen (Integration)

git merge <branch>

Integriert Änderungen aus anderem Branch in den aktuellen

„Merge Commit“

master origin/master

$ git checkout master

$ git merge origin/master

(20)

Professor Dr. Michael Mächtel

Branches mergen (FastForward)

git merge <branch>

„Fast Forward Merge“

- Nur Referenz-Update

39

$ git checkout master

$ git merge origin/master

master origin/master

Git Grundlagen

git pull

Vereinfacht fetch und merge Operationen

Aber: Birgt dadurch Gefahren (wie git commit –a) Leute denken: git pull ist ein Dropbox-Update 😨 Immer bewusst daran denken, was es tut!

$ git pull <remote> <branch> $ git fetch <remote>

$ git merge <remote>/<branch>

(21)

Professor Dr. Michael Mächtel

git push

Push aktualisiert Branches, merged nicht Pushen nur möglich, wenn Merge FF wäre

41

$ git push origin master

To https://github.com/USERNAME/REPOSITORY.git ! [rejected] master -> master (non-fast-forward) ...

Git Grundlagen

Disclaimer / Quellen

Der Inhalt basiert auf den Folien von Lukas Kalbertodt:

https://github.com/LukasKalbertodt/programmieren-in-rust Dieses Material ist für das Labor Betriebssysteme, Studiengang AIN an der HTWG Konstanz erstellt worden.

Referenzen

ÄHNLICHE DOKUMENTE

Apropoo „Bsinne Si sich no?" Es isch juschtemänd 10 Joor häär, wo d Mass Schwyz Messe Schweiz sich geege d SARS-Verfiegig vom Bundesamt fir Gsundhait BAG im Zämmehang mit der

Dr Bärnhard Scherz und dr Kurt Wyss - baidi vo dr «National-Zytig» - und dr Museumsdiräggter Franz Meyer hänn dr Picasso in syner Villa «Notre Dame de Vie» z Mougins bsuecht, und

Doo het im vorletschte Joorhundert dr ryychscht Schwyzer sy ganz Vermeege dr «Vatterstadt» Basel vermacht und was isch nit alles uus däre Stiftig entstände: Wo wär denn sunscht

directory Staging area Staging area Local repo Local repo Remote repo Remote repo.. git push git push

git branch NAME neuen Branch anlegen (Zeiger auf aktuellen Commit) git checkout NAME zu Branch NAME wechseln (HEAD-Zeiger setzen). Mergen (Zusammenf¨ uhren

2 Neuen Branch erstellen und auschecken. git branch neuesfeature git

git pull origin master # Hier wird eventuell Konflikt angezeigt git push origin master.

- Erst jetzt kommuniziert das lokale Repository mit dem online Repository - Öffnen mit Rechtsklick auf Projekt → Team → Push Branch „master“.