Centralized vs. Distributed – Git Bash – Mit Git arbeiten



Centralized vs. Distributed – Git Bash – Mit Git arbeiten

1 0


git-vs-pres


On Github tklepzig / git-vs-pres

Commit often, perfect later, publish once.

Centralized vs. Distributed

Git Bash

$ git <verb>
$ git help <verb>
$ git <verb> --help

Mit Git arbeiten

$ git init
$ touch file-1.txt
$ git add file-1.txt
$ git commit -m "first commit"
$ echo "42" > file-1.txt

→ Git erkennt Änderungen anhand des Dateiinhalts

Geänderte Dateien anzeigen

$ git status

Änderungen vergleichen

$ git diff
$ git difftool

Änderungen stagen und committen

$ git add file-1.txt
$ git commit -m "changed file"
$ git commit -am "changed file"

Staging Area

$ git add [-p|--patch] file-1.txt
$ git reset file-1.txt

History anzeigen

$ git log
$ git l

Dateien und Ordner von der Versionsverwaltung ausschließen

.gitignore

[Dd]ebug/
*.dll

Tags

  • Entspricht einem Label im TFVC
  • $ git tag v1.0.0

Stash

  • Ist ähnlich dem Shelven im TFVC
  • $ git stash
  • $ git stash pop

→ Existiert nur lokal

Branching

Branches sind nur Zeiger

Ein Repository ist immer nur im Kontext eines Branches

Warum & wozu?

  • Produktive, funktionierende Version gewährleisten
  • Dinge ausprobieren, ohne den vorhandenen Code zu gefährden
  • Einzelne Features bzw. Programmteile im Entwicklungsprozess isolieren
  • ...

Branches benennen

  • Darf kein ASCII Steuerzeichen enthalten
  • Keines der folgenden Zeichen darf vorkommen: Leerzeichen, Tilde (~), Caret (^), Doppelpunkt, Fragezeichen, Asterisk (*), Öffnende eckige Klammer ([)
  • Darf kein Backslash enthalten

Vollständige Liste: git-check-ref-format Manual Page

  • Nutzerverwaltung
  • ValidierungBeiPasswortAenderung
  • 103279
  • HochgeladeneDateiMaximal5MB
  • GesperrterNutzerWirdNichtNach5MinutenEntsperrt

Besser

  • Kurze und prägnante Namen
  • Hierarchische Bezeichnungen
  • Keine bloße Zahl
  • CamelCase vermeiden, Wörter mit Minus trennen
  • feature/nutzerverwaltung
  • bugfix/validiere-passwort
  • release/v1.0.0
  • junk/ovale-buttons

Warum den Slash als Hierarchie-Trenner?

  • Git behandelt die Hierarchie als Verzeichnisse
  • Auto Complete in der Bash ist schneller
  • Versch. grafische Tools (bspw. SourceTree) stellen die Branches ebenfalls als Ordner dar

Alles nur Best Practices, wenn es einem gar nicht zusagt, kann man es auch komplett anders machen

Mit Branches arbeiten

$ git branch develop
$ git checkout develop
$ git checkout -b develop master

Fast-Forward vs. Recursive Merge

Rebasing

Synchronisation

  • Vermeiden von umfangreichem Merge am Ende
  • $ git checkout feature/user-mgmt
    $ git merge develop

Arbeiten mit Remote Repositories

Vorhandenes Repository klonen

$ git clone Remote-URL

Änderungen abholen

$ git fetch

Änderungen in das Arbeitsverzeichnis mergen

$ git merge

→ Entscheidet selbst, ob es ein recursive oder fast-forward Merge ist

Warum man git pull nicht verwenden sollte

Workflow: Änderungen vom zentralen Repository integrieren

  • Kein pull verwenden
  • Erst fetchen ( git fetch)
  • Anschließend rebasen ( git rebase)
  • Bei Merge-Konflikten: git mergetool
    • Anschließend git rebase --continue aufrufen

Rebase niemals bei bereits veröffentlichten Commits anwenden!

Lokale Commits veröffentlichen

$ git push

→ Immer nur für den Branch, in dem man sich gerade befindet

Learning by doing...

Aufgabe

Erstellen einer Datei mit sechs Dingen, jedes repräsentiert dabei ein Feature

Repository klonen

https://github.com/tklepzig/git-alice-[Team-Nummer: 1-6].git

Beispiel Team 1

https://github.com/tklepzig/git-alice-1.git

Inhalt von things.txt

Six impossible things before breakfast:

Neuen Branch develop erstellen und von master abzweigen

Neue Zeile

1. There's a potion that can make you shrink.

Neue Zeile

2. And a fruit that can make you grow.

Commit often, perfect later

Letzten Commit korrigieren

2. And a fruit cake that can make you grow.

Zum Remote Repository pushen

Neue Zeile

3. Animals can talk.

Neue Zeile

4. Dogs can disappear.

Letzten Commit korrigieren

4. Dogs Cats can disappear.

Wenn committed: Warten

Zum Remote Repository pushen

Push ist nicht erlaubt

  • Änderungen vom Remote Repository holen
  • Anschließend pushen

Neue Zeile

5. There is a place called Wonderland.

Neue Zeile

6. I can slay the Jabberwocky.

Wenn committed: Warten

Zum Remote Repository pushen

Push ist nicht erlaubt

  • Änderungen vom Remote Repository holen
  • Merge-Konflikte auflösen
  • Anschließend pushen

Release erstellen

  • develop nach master mergen und pushen
  • Tag v1.0.0 erstellen und pushen

Fertige Datei:

Six impossible things before breakfast:
1. There's a potion that can make you shrink.
2. And a cake that can make you grow.
3. Animals can talk.
4. Cats can disappear.
5. There is a place called Wonderland.
6. I can slay the Jabberwocky.

;)

Gommid offdn, bärfäggd lädor, bablisch wohnns.

Fragen? Fragen!

Commit often, perfect later, publish once.