Inhaltsverzeichnis

Versionierung: git

Nachfolgend soll die Versionierung mit GIT beschrieben werden. Hintergrund ist Vorhalten mehrerer Versionen einer Datei oder bestimmter Verzeichnisse (zum Beispiel /etc), damit Änderungen festgehalten werden.


Installation

Für DEBIAN stehen die notwendigen Pakete im Repository bereit:

~# apt-get install git


Erste Versionierung

Für die erste Versionierung eines bestimmten Verzeichnisses (nachfolgend das Verzeichnis /etc) sind mehrere Schritte notwendig.


~# cd /etc/


~# git init


~# git add .


~# git commit -m "Eine Beschreibung hinzufügen"


Arbeitsweise

Alle Änderungen die im Verzeichnis vorgenommen werden, müssen in das GIT-Repository aufgenommen werden. Nachfolgend ein kleiner Auszug der Arbeitsweise mit GIT.


~# git status
# On branch master
nothing to commit (working directory clean)


git status
# On branch 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:   hosts
#
no changes added to commit (use "git add" and/or "git commit -a")


~# git add /etc/hosts
~# git commit -m "Änderung der Datei '/etc/hosts'"
[master f05a12c] Änderung der Datei '/etc/hosts'
...


~# git checkout -- /etc/hosts


~# git diff
diff --git a/hosts b/hosts
index 3126eb2..812e530 100644
--- a/hosts
+++ b/hosts
@@ -1,4 +1 @@
 192.168.10.135 usb
-127.0.0.1      localhost


~# git add -u .
~# git commit -m "Lokale Datei gelöscht"


~# git push


~# put pull origin master

Es wird der 'master'-Zweig heruntergeladen.


Überwachung

Soll das Verzeichnis überwacht werden, damit alle Änderungen automatisch ins Repository hochgeladen werden, hilft das Programm watcher, welches hier beschrieben ist. Die Konfigurationsdatei /etc/watcher.ini wird um zwei Überwachungen ergänzt.


[etc-git-add]
watch=/etc
events=create,modify,write_close
excluded=/etc/.git
recursive=true
autoadd=true
command=cd /etc/ && git add $filename && git commit -m "Erstellen oder Verändern der Datei: $filename"


[etc-git-remove]
watch=/etc
events=delete
excluded=/etc/.git
recursive=true
autoadd=true
command=cd /etc/ && git add -u $filename && git commit -m "Löschen der Datei: $filename"


~# /etc/init.d/watcher.py restart


Datensicherung und -wiederherstellung

Die Sicherung und wiederherstellung eines komplettes Repository, geht über den Befehl „git bundle“.


~# git bundle create <Dateiname> master
Counting objects: 1421, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1369/1369), done.
Writing objects: 100% (1421/1421), 152.35 KiB, done.
Total 1421 (delta 977), reused 0 (delta 0)

Voraussetzung für das erfolgreiche durchführen des Befehls ist, dass im aktuellen Verzeichnis ein GIT-Repository vorhanden ist.


git clone <Dateiname> -b master .
Cloning into '.'...
Receiving objects: 100% (1421/1421), 152.35 KiB, done.
Resolving deltas: 100% (977/977), done.

Die Dateien werden im aktuellen Verzeichnis wiederhergestellt.