Git & GitHub Tutorial - OsnaCS/dbp-2015 GitHub Wiki
Hinweis: Standardmäßig ist vi als Editor für Commit Nachrichten eingerichtet. Wenn ihr, wie in der Präsentation, nano haben wollt, führt Folgendes aus:
git config --global core.editor "nano"
1. GitHub Account erstellen
Erstellt euch einen GitHub Account (oben rechts auf "Sign up"). Nutzt am besten eure Uni-Email Adresse, da ihr so später einfacher ein Angebot nur für Studenten in Anspruch nehmen könnt. Falls ihr schon ein Github Account habt, könnt ihr auch das nutzen.
Euer "Username" ist halbwegs wichtig, da er später in vielen Links von euren Repositories steht. Der Link zu eurem Benutzeraccount ist z.B. github.com/torvalds und der Link zu einem Repository ist dann github.com/torvalds/linux. Nutzt am besten entweder nur euren Nachnamen (torvalds) oder euren vollen Namen in CamelCase (MiriamBeutel, LukasKalbertodt, JulianKniephoff).
2. SSH Key hinzufügen
Der SSH Key wird von git genutzt, um Rechte zu prüfen. Statt eines Passwortes, das ihr immer eingeben müsst, legt ihr euch auf eurem PC eine Datei an, die als Passwortersatz dient: Den Schlüssel. Damit dieser Schlüssel aber nicht einfach geklaut wird, wenn jemand sich Zugang zu eurem System verschafft, ist der Schlüssel selber nochmal mit einem Passwort verschlüsselt. Klingt eventuell kompliziert, ist aber nachher deutlich einfacher und sicherer.
Schritt 1: Key erzeugen
Führt folgenden Befehl im Terminal aus (fügt eure richtige E-Mail Adresse ein, die ihr für GitHub verwendet habt):
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
Wenn ihr gefragt werdet, in welcher Datei der Key gespeichert werden soll, drückt einfach Enter, ohne etwas einzugeben. Danach wird nach einem Passwort gefragt. Dies wird genutzt, um euren Key zu verschlüsseln. Dieses Passwort braucht ihr, wenn ihr euren Schlüssel verwenden wollt. Selbstverständlich sollte das Passwort nicht zu kurz oder einfach sein.
Nachdem ihr das Passwort zweimal eingegeben habt, wird euch der sog. Fingerprint eures Keys angezeigt als auch, wohin die Datei gespeichert wurde:
Your identification has been saved in /home//wwacker/.ssh/id_rsa.
Your public key has been saved in /home/wwacker/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]
Schritt 2: Key zum GitHub Account hinzufügen
Öffnet die Datei mit der .pub-Endung aus Schritt 1 in einem Editor eurer Wahl (z.B. $ subl /home/wwacker/.ssh/id_rsa.pub) und kopiert den kompletten Inhalt (Wichtig: Fügt keine leeren Zeilen hinzu, sondern kopiert exakt den Inhalt der Datei).
- Geht im Browser auf github.com und meldet euch an
- Klickt dann oben rechts auf euer kleines Profilfoto
- Im aufklappenden Menü klickt ihr dann auf "Settings"
- Auf der neuen Seite klickt ihr dann in der linken Sidebar auf "SSH Keys"
- Danach klickt ihr auf den Button "Add SSH Key"
- Im Titelfeld gebt ihr "Uni Key" oder ähnliches ein
- Fügt jetzt den kopierten Inhalt der Datei in das Feld "Key" ein
- Klickt auf "Add" und gebt euer GitHub Kennwort ein (nicht das vom Key!), um die Aktion zu bestätigen
Schritt 3: Key testen
Ob auch alles geklappt hat, testet ihr, indem ihr folgenden Befehl im Terminal ausführt:
$ ssh -T [email protected]
Jetzt bekommt ihr eventuell diese Meldung:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
Dann gebt "yes" ein und bestätigt mit Enter.
Wenn jetzt alles geklappt hat, solltet ihr Folgendes sehen:
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
Falls ihr etwas anderes seht, fragt einen Tutor oder Sitznachbarn.
3. Repository forken
Nun müsst ihr euch eine private Kopie des Projekt-Repositories anlegen. Dafür besucht ihr die Seite eures Repositories auf GitHub und klickt oben rechts auf "Fork". Nach wenigen Momenten solltet ihr zu eurem Fork weitergeleitet werden.
Unterscheidet immer zwischen dem Original-Repo (github.com/OsnaCS/projektname) und eurem Fork (github.com/WilliWacker/projektname).
4. Klonen und remotes anpassen
Jetzt ist es an der Zeit euren Fork zu clonen, also auf euren PC zu laden. Um das zu tun, braucht ihr die Clone-URL eures Forks. Die findet ihr auf der Seite eures Repositories unten rechts. Dort sollte "SSH clone url" mit einer URL stehen. Falls dort "HTTPS clone URL" steht, fragt einen Tutor oder Sitznachbarn. Die SSH-URL kopiert ihr jetzt in die Zwischenablage.
Arbeitet bitte nur im /local Verzeichnis und nicht in eurem Heimatsverzeichnis. Führt dazu folgendes aus (ersetzt die URL durch eure gültige):
$ cd /local
$ git clone [email protected]:WilliWacker/projektname.git
$ cd projectname
Nach kurzer Zeit ist jetzt ein Ordner projektname entstanden, in dem sich schon die Dateien aus eurem Repository befinden sollten.
Nun müssen wir noch das Original Repository als remote hinzufügen. Ein Remote besteht vereinfacht gesagt aus einem Namen und einer URL. Wir brauchen zwei Remotes:
origin: Euer Fork auf GitHubupstream: Das originale Repository auf Github
origin wurde automatisch beim clonen angelegt. Wir müssen also nur noch upstream hinzufügen. Dazu müsst ihr die clone-URL eures originalen Repositories wie oben beschrieben herausfinden. Diese URL kann diesmal aber auch eine HTTPS clone url sein. Mit dieser URL fügt ihr aus:
$ git remote add upstream [email protected]:OsnaCS/projektname.git
Danach sollte der Befehl git remote die beiden korrekten Remotes anzeigen und auch der Befehl git fetch upstream sollte funktionieren.
5. Test Pull Request erstellen
Zuletzt testen wir mal den Standard-Workflow für die nächsten Wochen. Dazu sollt ihr Folgendes tun:
- Für Rust Gruppe: Wechselt in den
devbranch (dort oder in einem feature-branch werdet ihr hauptsächlich arbeiten -- kommt aber auch auf eure Gruppe an). Falls der dev branch nicht existiert, erstellt ihn mitgit branch dev --tracking. Alle anderen: Bleibt auf Master (= tut nix)! - Legt dort eine Datei an, die nach eurem Nachnamen benannt ist
- Fügt diese Datei hinzu
- Erstellt einen Commit
- Push't diesen commit auf euren privaten Fork
- Erstellt auf Github einen Pull Request (PR):
- Von eurem branch
dev... - ... zu dem originalen branch
git-tutorial
- Von eurem branch
- Bearbeitet die von euch erstellte Datei und schreibt "hallo" hinein
- Fügt die Datei wieder hinzu und commit'et
- Push't eure Änderung wieder zu eurem privaten Fork
- Auf der Seite eures PR's sollte jetzt ein weiterer commit angezeigt werden
- Wartet darauf (oder sagt einem Tutor Bescheid), bis euer PR gemerged wurde
- Sobald ein paar andere PR's schon gemerged wurden, holt euch die Änderungen (die Dateien der anderen Studenten) von dem originalen Repository (
upstream)
Danach sollte der lokale dev bzw master Branch wieder zurückgesetzt werden, sodass die ganzen Namens-Dateien nicht darin sind. Dazu führt aus:
git reset --hard upstream/dev # bzw. upstream/master