-
Notifications
You must be signed in to change notification settings - Fork 12
Git und GitHub
Wiki ▸ Git und GitHub
(Originaldokument von Christoph Jerolimov und Dominik Schilling)
Hier finden Sie weitere Informationen und [Konventionen zum Umgang mit GitHub und WBA1](/th-koeln/wba1-2015/wiki/GitHub und WBA1).
- Einführung
- Was ist ein Repository
- Was ist ein Commit?
- Was ist ein Push
- Was ist ein Branch
- Was ist ein Merge?
Einführung ↑
Git ist ein Softwareversionierungssystem das ursprünglich für die Verwaltung des Linux-Quelltextes von Linus Torvalds entwickelt wurde. Linus Torvalds begann im April 2005 mit der Entwicklung von Git, da die bisher genutze Software BitKeeper nicht mehr kostenlos verwendet werden konnte.
(Quelle: Jörn Fiege, Sascha Lemke - Git-Advanced Dokumentation WBA1 WiSe 2012)
Die Grundfunktion von git bzw. eines Systems zur Versionsverwaltung besteht darin Änderungen an Dokumenten und Dateien zu erfassen und zu verwalten. In der Softwareentwicklung wird dies üblicherweise zur Verwaltung von Quellcode eingesetzt. Git unterscheidet sich allerdings ein wenig zu den etwas tradionelleren Verwaltungssystemen. Gerade der Ansatz der nicht linearen Entwicklung ist ein großer Kern von Git.
(Quelle: Jörn Fiege, Sascha Lemke - Git-Advanced Dokumentation WBA1 WiSe 2012)
Die Idee hinter GitHub ist eine einfache Möglichkeit zum Teilen von Codes mit Mitarbeitern, Freunden oder komplett fremden. GitHub wurde deswegen im Jahr 2008 in San Francisco von Tom Preston-Werner, Chris Wanstrath und PJ Hyett gegründet. Mittlerweile ist GitHub der größter Hoster für Quellcode und wird immer beliebter in der Entwickler-Szene.
Mit dem Verwaltungsystem Git als ihr Kernprodukt bringen sie immer weitere Features auf den Markt rund um den Bereich "Social Coding". Neben Dingen wie Gist, einer Developer API und GitHub Pages gibt es unzählige weitere Features die Git und GitHub zur ersten Wahl machen, was die Verwaltung und Versionierung von Open Source Quellcode angeht.
(Quelle: Jörn Fiege, Sascha Lemke - Git-Advanced Dokumentation WBA1 WiSe 2012)
GitHub stellt zudem eigene Software zur sehr einfachen Benutzung von Git, inbesondere in Zusammenarbeit mit GitHub für OSX und Windows zur Verfügung.
Konfiguration: Name und E-Mail ↑
Die Daten sind nötig, um Commits erfolgreich abzusetzen. Jeder Commit wird mit diesen Eingaben verknüpft.
$ git config --global user.name "Name"
$ git config --global user.email "E-Mail Adresse"
Die eingetragene E-Mail sollte der E-Mail Adresse bei GitHub entsprechen! (Hinweis: E-Mail wird öffentlich einsehbar sein.)
Authentifizierung ↑
GitHub erlaubt die Authentifizierung über die beiden Protokolle SSH
und HTTPS
.
HTTPS: https://github.com/th-koeln/wba1-2015.git
Bei HTTPS wird bei jedem Commit Name und Passwort abgefragt. (Die GitHub GUI speichert diese Daten zur Vereinfachung.)
SSH: [email protected]:th-koeln/wba1-2015.git
Was ist ein Repository? ↑
Ein Repository ist ein Verzeichnis, wo digitale Objekte gespeichert werden können. Ein solches Repository ist zum Beispiel wba1-2015.
Wie clone ich ein Repository? ↑
Jedes Repository hat eine eindeutige URL. Diese kann auf GitHub gefunden werden:
Nutze entweder die HTTP oder die SSH Variante, siehe Authentifizierung.
In Git gibt es zum Clonen den Befehl clone
welcher mit der Repository URL ergänzt wird:
$ git clone [email protected]:th-koeln/wba1-2015.git
Standardmäßig wird der Ordner gleich des Repository Namens sein. Hier also wba1-2013
.
Wie halte ich meine Kopie (Clone) auf den aktuellen Stand? ↑
Die Kopie ist nur zum Zeitpunkt des Clonens aktuell. Danach muss sie manuell auf dem Laufenden gehalten werden. Dies geht mit dem Befehl pull
.
$ git pull
Was ist ein Commit? ↑
Mit einem Commit werden deine Änderungen mit einer Nachricht versehen. Dabei bestätigst du sie gleichzeitig für die nächste Veröffentlichung.
$ git commit -am "Datei aktualisiert"
Wie füge ich Dateien zu einem Commit hinzu? ↑
Bevor ein Commit abgesetzt werden kann, müssen die Änderungen dem Commit hinzugefügt werden. Dies geht mit dem Befehl add
. Möchte man alle Änderungen hinzufügen, dann reicht ein Punkt:
$ git add .
Möchte man eine spezielle Datei ansprechen, dann nur die jeweilige Datei angeben:
$ git add /pfad/zur/datei.txt
Wie setze ich einen Commit zurück? ↑
Hier gibt es zwei Varianten - die "softe" und die "harte" Variante. Bei der soften Vaiante wird nur der Commit zurückgesetzt, die Ändernungen bleiben bestehen. Bei der harten Variante hingegen werden auch die Ändernungen verworfen. Vorsicht also.
$ git reset --soft HEAD~1
# oder
$ git reset --hard HEAD~1
Die 1 entspricht dabei der Anzahl der Commits, die zurückgesetzt werden sollen.
Was ist ein Push? ↑
Die Änderungen sind bis Dato in deinem lokalen Repository. Um die Änderungen an das entfernte Repository, hier GitHub, zu senden, wird der push
Befehl benötigt.
$ git push
Was ist ein Branch? ↑
Als Branch bezeichnet man einen Zweig im Repository. Der Hauptzweig ist der Master Branch.
Das Problem: Der Master ist keine Spielwiese! Die Lösung: Einen eigenen, temporären „Entwicklungszweig“ erstellen.
Vorteile:
- Lokal und unabhängig
- Pushen prinzipell optional, aber ideal für (Sub-)Teams
- Umkehrschluss: Nicht alle branches sind lokal verfügbar!
Branches werden in Git mit dem Befehl branch
verwaltet. git branch
zeigt zum Beispiel die lokalen Branches an.
Wie erstelle und veröffentliche ich einen Branch? ↑
Zunächst erstellt man lokal einen Branch vom Master Branch:
$ git branch branch_name
$ git checkout branch_name
Danach kann dieser mit dem Push Befehl veröffentlicht werden:
$ git push origin branch_name
Wie ziehe ich einen externen Branch auf meinen lokalen Rechner? ↑
Dies setzt voraus, dass der Remote Branch existiert.
$ git branch branch_name origin/branch_name
$ git checkout branch_name
Was darf ich in meinem Branch NICHT machen? ↑
Auch wenn der eigene Branch eine größere „Spielwiese“ darstellt, solltest du folgende Dinge trotzdem nicht machen:
- Lösche keine vorhanden Ordner
- Ändere nicht die Stylesheets im
revealjs-template
Verzeichnis - Ändere keine Dateien außerhalb deines speziell für den Vortrag angelegten Ordner
Warum? Dein Branch soll wieder mit dem Master vereint werden. Änderungen obiger Art würden später in Konflikten und Mehrarbeit enden.
Wie stelle ich meine lokalen Änderungen öffentlich? ↑
$ git add .
$ git commit -am "Branch aktualisiert"
$ git push origin branch_name
Wie kann ich den lokalen Branch wechseln? ↑
Git stellt dafür den Befehl checkout
zur Verfügung:
$ git checkout master
$ git checkout branch_name
$ git checkout master
Wie kann ich einen Branch löschen? ↑
Falls der Branch schon veröffentlicht wurde:
$ git push origin --delete branch_name
Einen lokalen Branch löschen:
$ git branch -d branch_name
Was ist ein Merge? ↑
Unter einem Merge versteht man die Zusammenlegung zweier Versionszweige/Branches. Merges passieren meistens automatisch.
- Bei parallelen Arbeiten (gleicher Branch)
- Ergebnisse veröffentlichen (eigener Branch → Master)
- Branch aktualisieren (Master → eigener Branch)
Git stellt dafür den Befehl merge
bereit.
Wie überführe ich meine Änderungen aus Branch X in den Master Branch? ↑
Zunächst sollte man sich im richtigen Branch befinden, nämlich im Master Branch. (Annahme: Der Master Branch ist vorhanden und der Branch branch_name.)
$ git branch
* master
branch_name
$ git merge branch_name
$ git push origin master
Wie löse ich Konflikte? ↑
Konflikte enstehen meistens, wenn Änderungen an Dateien noch nicht lokal gezogen worden. Git wird das Pushen dann unterbinden. Ein git pull
ist nötig. Dann wird Git die betroffenen Dateien markieren.
Eine markierte Datei hat folgendes Schema:
<<<<<<< HEAD
Ciao Mama
=======
Ciao Bella
>>>>>>> f53e906557375ba556372320d1d96ef265365d4a
Was zwischen <<<<<<< HEAD
und =======
sind unsere Änderungen, zwischen =======
und >>>>>>>
die entfernten Änderungen, die noch nicht gezogen waren. Hier musst du dich nun entscheiden, was wirklich in die Datei soll. Nach dem Säubern der Datei (Git Zeichen auch entferen):
$ git commit -a
Ein Editor öffnet sich mit einer schon vorbereiteten Commit Nachricht. Dies einfach schließen und den Merge Vorgang beenden:
$ git push