Versionskontrolle
Auf dieser Seite finden Sie Informationen zum Umgang mit der Versionskontrolle Git.
Installation von Git unter Windows
Zuerst https://git-scm.com/download/win den Installer herunterladen.
Der Download sollte automatisch starten.
Im Installationsprozess sollte eine Konfiguration geändert werden.
Im ersten Schritt Select Components
sollte die Windows Explorer integration
mit Git Bash Here
ausgewählt sein. Dies ist standardmäßig der Fall.
Im zweiten Schritt Choosing the default editor used by Git
sollte ein anderer Editor als Vim verwendet werden.
Sie können entweder Ihren Lieblingseditor aus der Liste auswählen oder den Punkt Select other editor as Git's default editor
.
Als Location of editor
tragen Sie dann Ihren Editor ein oder einfach C:\Windows\notepad.exe
für den Editor von Windows.
Ab diesem Punkt können die Standardeinstellungen genutzt werden, am Ende auf Install
klicken.
Nach der erfolgreichen Installation nur noch kurz das Häkchen bei View Release Notes
entfernen und mit Next
den Installer beenden.
Um git zu verwenden, öffnen Sie mit dem Windows Explorer den Ordner, in dem Sie die Bearbeitung der Aufgaben vornehmen wollen.
Mit einem Rechtsklick in dem Ordner können Sie nun im Kontextmenü Git Bash Here
auswählen, es öffnet sich ein Konsolenfenster.
Hinweise:
- Die
Git Bash
nutzt die TastenkombinationStrg + Einfg
für Kopieren undUmschalt + Einfg
für Einfügen statt der üblichenStrg + C
für Kopieren undStrg + V
für Einfügen. - Die
Git Bash
unterstützt Autovervollständigung für Dateien, das heißt, statt den gesamten Pfad anzugeben, können Sie den Pfad starten und dannTab
drücken, damit der Pfad vervollständigt wird.
Konfiguration des Nutzers
Damit GitHub Ihnen die Commits, die Sie durchführen, zuordnen kann, sollten Sie einmal Ihren Namen und Ihre Mail-Adresse setzen. Dazu müssen Sie in der Konsole die folgenden beiden Befehle eingeben und jeweils mit der Eingabe-Taste bestätigen. Sie müssen dabei meinen Namen und meine E-Mail-Adresse natürlich durch Ihre jeweiligen Informationen ersetzen. Sie sollten eine E-Mail-Adresse nutzen, die Sie auch bei GitHub eingetragen haben. Bitte beachten Sie, dass die E-Mail-Adresse von Personen eingesehen werden kann, die Zugriff auf das Repository haben.
1
$ git config --global user.name "Jan Christiansen"
1
$ git config --global user.email "jan.christiansen@hs-flensburg.de"
Unter diesem Link findet ihr bei Interesse noch eine alternative Erklärung und zusätzliche Informationen zu dieser Konfiguration und GitHub.
Git über die Konsole bedienen
Zum Bearbeiten und zur Abgabe der Aufgaben müssen Sie den über GitHub bereitgestellten Source-Code über die Konsole verwalten.
Repository klonen
Damit Sie den Code lokal bearbeiten können, müssen Sie das Repo klonen. Sie benötigen dafür zunächst einen SSH Key. Diesen müssen Sie zu Ihrem GitHub-Account hinzufügen. Eine ausführliche Erklärung zur Generierung eines SSH Keys und dem Hinzufügen des SSH Keys zu Ihrem GitHub-Account finden Sie hier.
Anschließend benötigen Sie die URL Ihres Repositories. Diese erhalten Sie auf der GitHub-Webseite:
Mithilfe der URL können Sie das Repository über Ihre Konsole mit git clone <url>
herunterladen.
Sofern Sie der Generierung des SSH Keys eine Passphrase festgelegt habt, müssen Sie diese nun eingeben.
1
$ git clone git@github.com:HS-Flensburg-Algo/laboraufgabe00-jan-christiansen.git
Anschließend wechseln Sie in das heruntergeladene Repository mit cd <repo-name>
.
1
$ cd laboraufgabe00-jan-christiansen
Bearbeitete Dateien hochladen
Nachdem Sie die Aufgabe bearbeitet haben, können Sie mit git status
alle editierten Dateien sehen.
1
2
3
4
5
6
7
8
9
10
11
$ git status
On branch master
Your branch is up to data with `origin/master`.
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: src/main/java/de/fuas/algorithms/HelloWorld.java
no changes added to commit (use "git add" and/or "git commit -a")
Die Dateien, die Sie abgeben wollen, müssen nun jeweils mit git add <filepath>
hinzugefügt werden.
1
$ git add src/main/java/de/fuas/algorithms/HelloWorld.java
Hinweis:
- Sie können auch mehrere Dateien auf einmal hinzufügen, indem Sie die Dateipfade durch Leerzeichen getrennt auflistet, also zum Beispiel
git add <filepath1> <filepath2>
.
Zum Überprüfen, ob alle abzugebenden Dateien ausgewählt/hinzugefügt wurden, kann erneut git status
aufgerufen werden.
Alle in grün geschriebenen Dateien wurden zur Abgabe selektiert.
Die Ausgabe sieht dann zum Beispiel wie folgt aus.
1
2
3
4
5
6
7
8
$ git status
On branch master
Your branch is up to data with `origin/master`.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: src/main/java/de/fuas/algorithms/HelloWorld.java
Vor dem Hochladen in das Repository müssen die Dateien “committet” werden.
Einen Commit führt man mit dem Kommando git commit -m "<commit-message>"
durch.
Der Text <commit-message>
ist dabei eine Beschreibung der Arbeiten, die Sie durchgeführt haben und die Sie mit dem Commit bei GitHub hochladen wollen.
1
2
3
$ git commit -m "Change ..."
[master 7d612e] Change ...
1 file changed, 1 deletion(-)
Das Hochladen der Bearbeitung erfolgt zu guter Letzt mit git push
.
Mit dem Befehl git push
werden alle Commits, die Sie seit dem letzten git push
durchgeführt haben, hochgeladen.
1
2
3
4
5
6
7
8
9
10
$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compresiosn using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 366 bytes | 366.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com:HS-Flensburg-Algo/laboraufgabe00-jan-christiansen.git
f82bb14..d079b90 main -> main
Mögliche Probleme
Es kann vorkommen, dass der Befehl git push
nicht erfolgreich ist und ihr zum Beispiel eine Fehlermeldung der folgenden Art erhaltet.
1
2
3
4
5
6
7
8
To github.com:HS-Flensburg-Algo/laboraufgabe00-jan-christiansen.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'git@github.com:HS-Flensburg-Algo/laboraufgabe00-jan-christiansen.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Dies passiert zum Beispiel, wenn Sie parallel mithilfe des Web-Interface von GitHub Dateien hochgeladen oder Dateien verändert haben.
Um dieses Problem zu beheben, müssen Sie einmal die Änderungen, die im Repo passiert sind, zu Ihnen auf den Rechner holen.
Dazu müssen Sie den Befehl git pull
ausführen.
Nach Ausführung des Befehls sollte sich ein Editor öffnen.
Den Editor können Sie einfach schließen und die Datei speichern.
Danach sollte eine Nachricht der folgenden Art erscheinen.
1
2
3
4
5
6
7
8
9
10
11
12
13
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 10 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (10/10), done.
From github.com:HS-Flensburg-Algo/laboraufgabe00-jan-christiansen
a7a5355..e6dd480 master -> origin/master
Merge made by the 'recursive' strategy.
.github/classroom/autograding.json | 14 ++++++++++++++
.github/workflows/classroom.yml | 11 +++++++++++
2 files changed, 25 insertions(+)
create mode 100644 .github/classroom/autograding.json
create mode 100644 .github/workflows/classroom.yml
Jetzt sollten Sie ganz normal mit dem Befehl git push
fortfahren können.
Commit-Nachrichten schreiben
Wenn man professionell Software entwickelt, sollte man sich etwas Mühe mit den Commit-Nachrichten geben.
Wie in vielen anderen Bereichen der Informatik sollten die Nachrichten zumindest erst einmal einheitlich sein.
Sie sollten sich im Zuge der Veranstaltung gern so gut es geht an die Vorschläge unter How to Write a Git Commit Message halten.
Aufgrund der recht kleinen Projekte, die im Rahmen der Vorlesung programmiert werden, reicht es, wenn Ihre Commit-Nachrichten nur aus einem Subject bestehen.
Das heißt, mögliche Nachrichten wären zum Beispiel Add first implementation of ArrayList
, Fix size method
oder Rename class to ArrayList
.