Mehrere Alternativen könne gleichzeitig verfolgt werden → wenn z.B. ein neues Feature getestet werden muss → Verzweigungen bzw. Branches im Projekt
Ansatz: "move fast and break things" → funktioniert nur, weil man immer ein funktionsfähiges Backup hat
feature_x
master
od. main
gemergedmain
-Branchfeature_x
)main
Branchfeature_x
Branchmain
-Branch mergen→ soll für jedes Feature durchgeführt werden!
Wir wollen uns die Funktionsweise von Git ansehen und diese anhand eines Beispiels mit einem lokalen Repository erproben
.git
Dateien → alles darin wird von Git versioniertgit add
git commit
git push
Quelle aller folgenden Bilder: Quelle
$ mkdir project_1
$ cd project_1/
$ git init
Initialized empty Git repository in /project_1/.git/
$ nano main.py
$ git add .
$ git commit -m "created first file"
$ git config --global user.name "Max Mustermann"
$ git config --global user.email "max@mustermann.at"
→ verwenden Sie hier die gleichen Einstellungen wie für github.git
abgelegt → wird dieses gelöscht ist das Repository nicht mehr verwendbarmain.py
ist im Repository.git
Verzeichnis$ ls -la
total 9
drwxr-xr-x 1 jlhuber 1049089 0 Oct 10 09:15 ./
drwxr-xr-x 1 jlhuber 1049089 0 Oct 10 09:14 ../
drwxr-xr-x 1 jlhuber 1049089 0 Oct 10 09:16 .git/
-rw-r--r-- 1 jlhuber 1049089 15 Oct 10 09:15 main.py
$ git status
On branch master
nothing to commit, working tree clean
git add
)git add
hinzugefügt$ nano main.py
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.py
$ git add .
warning: LF will be replaced by CRLF in main.py.
The file will have its original line endings in your working directory
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: main.py
$ git commit -m "made it print hello world"
[master d16ac29] made it print hello world
1 file changed, 1 insertion(+), 1 deletion(-)
$ git log
commit d16ac298c8bebfbee72520da0a64b0fa2690845f (HEAD -> master)
Author: jhumci <julian.huber@mci.edu>
Date: Tue Oct 10 09:20:55 2023 +0200
made it print hello world
commit 22cde1b198d304a8eb428f8905ee8d8304316fbd
Author: jhumci <julian.huber@mci.edu>
Date: Tue Oct 10 09:16:18 2023 +0200
created first file
Wir wollen einen neuen Branch erstellen und dorthin wechseln
In git bash wird in runden Klammern der aktuelle Branch angezeigt
Erstellen und Wechsel zu neuem Branch
jlhuber@4LAP104500JLH MINGW64 /h/project_1 (master)
$ git branch add_variable
$ git checkout add_variable
Switched to branch 'add_variable'
Anpassen der Datei
jlhuber@4LAP104500JLH MINGW64 /h/project_1 (add_variable)
$ nano main.py
$ git add .
warning: LF will be replaced by CRLF in main.py.
The file will have its original line endings in your working directory
$ git commit -m "added a variable to the print statement"
[add_variable bc6fc8f] added a variable to the print statement
1 file changed, 2 insertions(+), 1 deletion(-)
Commit-History ändert sich mit dem Branch-Wechsel → es wird nur die Historie des aktuellen Branches angezeigt
Anzeigen der Commit-History
$ git log
commit bc6fc8f85adf2716bfc738c20a46c1ccc665e29e (HEAD -> add_variable)
Author: jhumci <julian.huber@mci.edu>
Date: Tue Oct 10 09:24:27 2023 +0200
added a varibale to the print statement
commit d16ac298c8bebfbee72520da0a64b0fa2690845f (master)
Author: jhumci <julian.huber@mci.edu>
Date: Tue Oct 10 09:20:55 2023 +0200
made it print hello world
commit 22cde1b198d304a8eb428f8905ee8d8304316fbd
Author: jhumci <julian.huber@mci.edu>
Date: Tue Oct 10 09:16:18 2023 +0200
created first file
Wir wollen nun in den master
-Branch wechseln und die Änderungen von add_variable
in master
mergen
Wechsel zu Master-Branch
jlhuber@4LAP104500JLH MINGW64 /h/project_1 (add_variable)
$ git checkout master
Switched to branch 'master'
Merge von add_variable
in master
jlhuber@4LAP104500JLH MINGW64 /h/project_1 (master)
$ git merge add_variable
Updating d16ac29..bc6fc8f
Fast-forward
main.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
$ nano main.py
VS-Code unterstützt uns in Zukunft dabei, dennoch ist es hilfreich die wichtigsten Befehle zu verstehen
Öffnen Sie das Verzeichnis nun in VS Code, wählen Sie die Datei main.py
aus und zeigen Sie die Zeitachse an
git branch <branch-name>
: Erstellt einen neuen Branchgit checkout <branch-name>
: Wechselt zu einem BranchBild: learngitbranching.js.org
Interaktion mit remote repository auf github
git clone
Wir wollen nun ein erstes Repository klonen:
test_git_shell
→ https://github.com/jhumci/test_git_shellKlonen des Repositories
$ git clone https://github.com/jhumci/test_git_shell
Cloning into 'test_git_shell'...
remote: Enumerating objects: 68, done.
remote: Counting objects: 100% (68/68), done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 68 (delta 30), reused 29 (delta 5), pack-reused 0 (from 0)
Receiving objects: 100% (68/68), 12.64 KiB | 1.40 MiB/s, done.
Resolving deltas: 100% (30/30), done.
Inhalt des Repository überprüfen
$ cd test_git_shell/
$ ls -la
total 19
drwxr-xr-x 1 mtpanny 1049089 0 Nov 5 14:04 .
drwxr-xr-x 1 mtpanny 1049089 0 Nov 5 14:03 ..
drwxr-xr-x 1 mtpanny 1049089 0 Nov 5 14:04 .git
-rw-r--r-- 1 mtpanny 1049089 25 Nov 5 14:03 .gitignore
-rw-r--r-- 1 mtpanny 1049089 1088 Nov 5 14:04 LICENSE.md
drwxr-xr-x 1 mtpanny 1049089 0 Nov 5 14:03 data
-rw-r--r-- 1 mtpanny 1049089 67 Nov 5 14:03 hello_world.py
-rw-r--r-- 1 mtpanny 1049089 403 Nov 5 14:03 make_primes.py
-rw-r--r-- 1 mtpanny 1049089 2808 Nov 5 14:03 readme.md
.gitignore
: Listet alle Dateien und Ordner auf, die nicht mittels git geteilt werden sollen → .gitattributes
: Konfigurationsdatei für gitreadme.md
: Textdatei mit Beschreibung & Erklärung des ProjektsLICENSE
oder LICENSE.md
: Lizenzdatei für das Projekt.gitignore
-Datei ist eine Textdatei, die Dateien und Ordner enthält, die von Git ignoriert werden sollen.DS_Store
-Dateien auf Mac.vscode
-Ordner__pycache__
-Ordner.venv
-Ordner*.pyc
-Dateien.gitignore
-Dateien → github/gitignore → jeweilige Datei herunterladen, in das Projekt kopieren und in .gitignore
umbenennengit fetch
die aktuellen Änderungen abholen:
$ git log
commit a0d6f07bd29595e9bbe346acf78322489851e423 (HEAD -> master)
Author: Julian Huber <94922106+jhumci@users.noreply.github.com>
Date: Wed Feb 7 08:54:08 2024 +0100
Update readme.md
commit c303672b3a9215a69b07b48a49833e53b872c017
Author: jhumci <julian.huber@mci.edu>
Date: Wed Jul 12 10:12:20 2023 +0200
new tasks
git fetch
$ git log HEAD..origin/master
commit 982a416434965dcf9a4956824c22a105782662b4 (origin/master, origin/HEAD)
Author: Julian Huber <94922106+jhumci@users.noreply.github.com>
Date: Mon Apr 8 10:01:23 2024 +0200
Update readme.md
commit 9602dce8ff2ba72b9900289525f336b57b85d497
Author: Julian Huber <94922106+jhumci@users.noreply.github.com>
Date: Mon Apr 8 08:13:51 2024 +0200
Update readme.md
commit c009fda83f2d19c6040bc70a5b527dbc1efa9963
Author: Julian Huber <94922106+jhumci@users.noreply.github.com>
Date: Wed Feb 7 08:55:48 2024 +0100
Update .gitignore
commit 29893946a2cbdfa7e80ac771af428805d2be91fc
Author: Julian Huber <94922106+jhumci@users.noreply.github.com>
Date: Wed Feb 7 08:55:21 2024 +0100
Update readme.md
git merge
git fetch
: Holen der aktuellen Änderungengit merge
: Einbauen der Änderungengit fetch
+ git merge
→ git pull
git add
+ git commit
git push
git diff
angezeigt werden+
In der Datei ist Code hinzugekommen-
Code wurde aus der Datei entfernttest_git_shell
, welches wir bereits geklont haben, arbeitenreadme.md
des Repositorys zu findenBenchmarking Sortier-Algorithmen auf 2 PCs
inital.zip
: nach dem Erstellen des Respositories befinden Sie sich im main
-Branch. Auf einem der Computer fügen Sie die Dateien aus inital.zip
ein, comitten die Änderungen und pushen Sie diese auf githubsort_1.zip
: auf dem ersten Computer erstellen Sie einen neuen Branch sort_1
und fügen die Datei sort_1.py
ein, comitten die Änderungen und pushen Sie diese auf githubsort_2.zip
: auf dem zweiten Computer erstellen Sie einen neuen Branch sort_2
und fügen die Datei sort_2.py
ein, comitten die Änderungen und pushen Sie diese auf githubmain
-Branch (Indem Sie auf der github-Website Compare & pull request
auswählen) oder in VS Code mittels "Branch/ Branch zusammenführen"
main
-Branch gesammelt haben auf die beiden Rechner und stellen Sie sicher, dass sie in den main
-Branch wechselntest.py
auf beiden Rechnern ausmain
-Branch bereit (commit
und push
) und mergen
Sie falls nötig die Änderungen in den main
-Branchresults.txt
und die History in einem öffentlichen github Repository ab. Die Dateien könnten z.B. wie folgt aussehen:
Computer Name: rechner_1
Date of Test: 2023-10-10 17:20:03
Bubble Sort Time: 13.187571 seconds
Quick Sort Time: 0.019813 seconds
Computer Name: rechner_2
Date of Test: 2023-10-10 17:20:03
Bubble Sort Time: 11.245562 seconds
Quick Sort Time: 0.022345 seconds