tar >rsync >git >

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