Nutzung von git Lokal oder mit einem zentralen Repo.
Installation in debian
~ # apt update && apt install git
Zentrales git Repo auf einem Server erstellen.
- Der Ordner "test.git" wird erstellt.
- Die Endung " .git " ist optional und hat keine Bedeutung für das Repo.
~ # git init --bare test.git
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/test.git/
Eigenen Namen und Email für das Git Repo eintragen.
~ # git config --global user.email "test@example.com" && git config --global user.name "Testi Tester"
Aktuellen Stand aus dem Repo laden.
- sobald man in einem Team arbeitet, ist das der erste Schritt, bevor man selbst Änderungen vornimmt.
- git pull holt alle Änderungen die zwischenzeitlich gemacht wurden.
~ # git pull
Lokalen Ordner ins git aufnehmen
~ # cd mein_projekt
~ # git init
Hinweis: Als Name für den initialen Branch wurde 'master' benutzt. Dieser
Hinweis: Standard-Branchname kann sich ändern. Um den Namen des initialen Branches
Hinweis: zu konfigurieren, der in allen neuen Repositories verwendet werden soll und
Hinweis: um diese Warnung zu unterdrücken, führen Sie aus:
Hinweis:
Hinweis: git config --global init.defaultBranch <Name>
Hinweis:
Hinweis: Häufig gewählte Namen statt 'master' sind 'main', 'trunk' und
Hinweis: 'development'. Der gerade erstellte Branch kann mit diesem Befehl
Hinweis: umbenannt werden:
Hinweis:
Hinweis: git branch -m <Name>
Leeres Git-Repository in /../mein_projekt/.git/ initialisiert
# gitignore anlegen und in der Config zuweisen
~ # touch .gitignore && git config --global core.excludesFile .gitignore
# Zentrales Repo verbinden
~ # git remote add origin ssh://user@node/home/test.git
# Alle geänderten Dateien dem Commit zuweisen
# Da wir den Ordner neu ins Git aufgenommen haben, weisen wir alle Dateien zu
~ # git add .
# prüfen was als Commit bereit steht
~ # git status
Auf Branch master
Noch keine Commits
Zum Commit vorgemerkte Änderungen:
(benutzen Sie "git rm --cached <Datei>..." zum Entfernen aus der Staging-Area)
neue Datei: .gitignore
# Die Änderung benennen
# Da es der erste Commit ist, sagen wir hier "Initial ..."
~ # git commit -m "Initial Commit"
[master (Root-Commit) c8ef31e] Initial Commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
# Alle Commits ins Repo hochladen
~ # git push --set-upstream origin master
Objekte aufzählen: 3, fertig.
Zähle Objekte: 100% (3/3), fertig.
Schreibe Objekte: 100% (3/3), 230 Bytes | 230.00 KiB/s, fertig.
Gesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0
To ssh://user@node/home/test.git
* [new branch] master -> master
Branch 'master' folgt nun Remote-Branch 'master' von 'origin'.
Neue Ordner und Dateien ins Git Repo hochladen.
- Alle erstellten Dateien, Ordner und Änderungen ins Git Repo hochladen.
- In die Commit Nachricht die Änderungen so genau wie möglich dokumentieren
- Am besten zu jedem Thema ein Commit machen, so lassen sich Änderungen leichter rückgängig machen.
# Ordner und Datei zum Testen anlegen
~ # mkdir neuer_ordner
~ # touch neuer_ordner/neue_datei.txt
~ # git status
Auf Branch master
Ihr Branch ist auf demselben Stand wie 'origin/master'.
Unversionierte Dateien:
(benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
neuer_ordner/
nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
(benutzen Sie "git add" zum Versionieren)
~ # git add neuer_ordner/
~ # git status
Auf Branch master
Ihr Branch ist auf demselben Stand wie 'origin/master'.
Zum Commit vorgemerkte Änderungen:
(benutzen Sie "git restore --staged <Datei>..." zum Entfernen aus der Staging-Area)
neue Datei: neuer_ordner/neue_datei.txt
~ # git commit -m "Erste Änderungen"
[master 19bce80] Erste Änderungen
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 neuer_ordner/neue_datei.txt
~ # git push
Objekte aufzählen: 4, fertig.
Zähle Objekte: 100% (4/4), fertig.
Delta-Kompression verwendet bis zu 12 Threads.
Komprimiere Objekte: 100% (2/2), fertig.
Schreibe Objekte: 100% (3/3), 346 Bytes | 346.00 KiB/s, fertig.
Gesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0
To ssh://user@node/home/test.git
c8ef31e..19bce80 master -> master
Git Branch erstellen
- Ein weiterer Branch dient dazu um parallel an einem neuen Projekt zu arbeiten, ohne das Hauptprojekt zu behindern.
- In diesem Beispiel soll einfach ein Shop System auf der Webseite integriert werden.
# Branch anlegen
~ # git branch shop_system
# Branch anzeigen
~ # git branch
* master
shop_system
# Den Branch wechseln
~ # git checkout shop_system
Zu Zweig »shop_system« gewechselt
# Man achte auf das *
~ # git branch
master
* shop_system
# Der Dateibestand ist noch der gleiche wie im "master" Branch.
# Machen wir mal eine Änderung
~ # touch index.php
~ # git add .
~ # git commit -m "index.php erstellt"
# Hier sagen wir wieder dass als Upload "origin" benutzt wird, weil wir den Branch auch im selben Repo speichern.
~ # git push --set-upstream origin shop_system
# Dem Git Branch ein neues Repo zuweisen (was wir zuvor mit git init --bare ... erstellt haben).
~ # git remote add shop_system ssh://user@node/home/shop_system.git
~ # git push --set-upstream shop_system shop_system
Objekte aufzählen: 13, fertig.
Zähle Objekte: 100% (13/13), fertig.
Delta-Kompression verwendet bis zu 12 Threads.
Komprimiere Objekte: 100% (8/8), fertig.
Schreibe Objekte: 100% (13/13), 1.29 KiB | 1.29 MiB/s, fertig.
Gesamt 13 (Delta 0), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0
To ssh://user@node/home/shop_system.git
* [new branch] shop_system -> shop_system
Branch 'shop_system' folgt nun Remote-Branch 'shop_system' von 'shop_system'.
# Machen wir mal wieder eine Änderungen und laden sie hoch.
~ # echo "Hallo" > index.php
~ # git add index.php
~ # git commit -m "Änderungen in der index.php"
[shop_system 8bc6e56] Änderungen in der index.php
1 file changed, 1 insertion(+)
# Die Änderungen wurden ins neue Git Repo hochgeladen
~ # git push
Objekte aufzählen: 5, fertig.
Zähle Objekte: 100% (5/5), fertig.
Delta-Kompression verwendet bis zu 12 Threads.
Komprimiere Objekte: 100% (2/2), fertig.
Schreibe Objekte: 100% (3/3), 297 Bytes | 297.00 KiB/s, fertig.
Gesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0
To ssh://user@node/home/shop_system.git
2c3c3d0..8bc6e56 shop_system -> shop_system
# Wenn wir wieder zurück in den "master" Branch wechseln, sehen wir dass die index.php nicht vorhanden ist.
# Alle Änderungen im "shop_system" Branch sind nicht im "master" sichtbar.
~ # git checkout master
Datei oder Ordner in die gitignore aufnehmen und aus dem Git Repo entfernen.
- Dateien und Ordner lassen sich auch aus dem Git entfernen wenn sie bereits hochgeladen wurden.
- In diesem Beispiel wollen wir die Datei " neue_datei.txt " nicht mehr im Git Repo haben.
- Möchte man Ordner auf die gleiche Weise entfernen dann " git rm -r --cached ordner_name " eingeben.
- Dateien mit Passwörter sollten grundsätzlich in die gitignore aufgenommen werden.
# Datei die Git ignorieren soll, in die gitignore Datei schreiben.
~ # cat .gitignore
neuer_ordner/neue_datei.txt
# Änderung hochladen
~ # git add .gitignore
~ # git commit -m "Datei neuer_ordner/neue_datei.txt als ignore"
[master 227622e] Datei neuer_ordner/neue_datei.txt als ignore
1 file changed, 1 insertion(+)
~ # git push
~ # git rm --cached neuer_ordner/neue_datei.txt
rm 'neuer_ordner/neue_datei.txt'
# Die Löschung wird als Änderung erkannt. Hier einfach wieder git commit + gut push, aber ohne "git add", benutzen.
# Die Änderung ist bereits vorgemerkt, daher ist ein "git add" nicht notwendig.
~ # git status
Auf Branch master
Ihr Branch ist auf demselben Stand wie 'origin/master'.
Zum Commit vorgemerkte Änderungen:
(benutzen Sie "git restore --staged <Datei>..." zum Entfernen aus der Staging-Area)
gelöscht: neuer_ordner/neue_datei.txt
# von gitignore erfasste Dateien anzeigen.
~ # git check-ignore -v $(find . -type f -print)
.gitignore:1:neuer_ordner/neue_datei.txt ./neuer_ordner/neue_datei.txt
# Die Datei lässt sich beliebig ändern, sie wird aber nicht als Änderung erfasst.
~ # echo "Inhalt" >> neuer_ordner/neue_datei.txt
~ # git status
Auf Branch master
Ihr Branch ist auf demselben Stand wie 'origin/master'.
nichts zu committen, Arbeitsverzeichnis unverändert
Git Remote URL ändern
~ # git remote set-url origin ssh://user@neuer_node/home/test.git
Git Remote URL anzeigen
~ # git remote -v
# oder ...
~ # git config --get remote.origin.url