Git
Git Download
Von der Projektseite: https://git-scm.com/
Wie funktioniert Git?
Für die folgenden Beispiele habe ich die Git-Bash verwendet:
Ein lokales Repository anlegen
Mit der Git-Bash in das gewünschte Verzeichnis gehen bzw. dort das geünschte Verzeichnis anlegen und dort hinein wechseln. Dann dieses Verzeichnis zu einem Git-Verzeichnis machen:
kpsto@Alice MINGW64 /c/users/peter/Documents $ mkdir git_tests kpsto@Alice MINGW64 /c/users/peter/Documents $ cd git_tests/ kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests $ git init Initialized empty Git repository in C:/Users/peter/Documents/git_tests/.git/ kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Git Konfigurieren
Vor der Verwendung muss das Verzeichnis konfiguriert werden:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git config --global user.name "Peter Stoeck" kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git config --global user.email stoeck_kp@web.de kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Für die weiteren Schritte habe ich einige Test-Dateien angelegt:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ touch test_001.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ touch test_002.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ echo "Hallo Git" > test_003.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ dir test_001.txt test_002.txt test_003.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Dateien in Git aufnehmen: Commit
Die Aufnahme von Dateien oder Änderungen in das Repository erfolgt in zwei Schritten.
Zuerst schauen wir uns mal den Status an:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) test_001.txt test_002.txt test_003.txt nothing added to commit but untracked files present (use "git add" to track) kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Dateien im Stage bereitstellen
Zuerst müssen die Dateien im Stage bereitgestellt werden:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git add test_001.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git add test_002.txt test_003.txt warning: in the working copy of 'test_003.txt', LF will be replaced by CRLF the next time Git touches it kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Mehrere Dateien können mit einem ADD in den Stagebereich geladen werden. Zur Trennung dient ein Leerzeichen.
Die Statusmeldung sieht jetzt so aus:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: test_001.txt new file: test_002.txt new file: test_003.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Git weist darauf hin, daß mit git rm --cached <file> Dateien wieder aus dem Stage-Bereich entfernt werden können.
Dateien ins Repository aufnehmen
Die im Stage vorhandenen Dateien können nun ins Repository aufgenommen werden:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git commit -m "Erste Dateien ins Repository übertragen." [master (root-commit) c4186b4] Erste Dateien ins Repository übertragen. 3 files changed, 1 insertion(+) create mode 100644 test_001.txt create mode 100644 test_002.txt create mode 100644 test_003.txt kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Es ist sinnvoll einen Kommentar zu diesem Commit zu schreiben, damit man später identifizieren kann was dieser beinhaltet.
Die Statusmeldung zeigt nun an, daß alles sauber ist:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git status On branch master nothing to commit, working tree clean kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Ein entferntes Resository anlegen
Bei einem vorhandenen lokalen Repository
Ich lege das entfernte Repository auf meinem NAS an.
Da mein NAS als Netzlaufwerk gemountet ist wird er von der Git-Bash nicht erkannt, die in einem eigenen Filesystem läuft (Linux Emulation unter Windows - MINGW). Deshalb muss ich den UNC-Pfad verwenden.
kpsto@Alice MINGW64 /c $ cd //Qnap/Public/GIT-Repos kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos $
Nun kann ich das Verzeichnis am entfernten Ort anlegen und es zum aktuellen Verzeichnis machen:
kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos $ mkdir git_tests_001.git kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos $ cd git_tests_001.git/ kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git $
Nun kann aus dem lokalen Repository heraus dieses gecloned werden:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git clone --bare . //Qnap/Public/GIT-Repos/git_tests_001.git Cloning into bare repository '//Qnap/Public/GIT-Repos/git_tests_001.git'... done. kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $
Da der Besitzer auf dem NAS nicht die selbe ID hat wie der auf dem lokalen Rechner bringt nun Probleme mit sich:
kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git $ git status fatal: detected dubious ownership in repository at '//Qnap/Public/GIT-Repos/git_ tests_001.git' '//Qnap/Public/GIT-Repos/git_tests_001.git' is owned by: (inconvertible) (S-1-5-21-3020799625-3799041462-1330622877-2002) but the current user is: ALICE/kpsto (S-1-5-21-1633449780-1257717864-3521173352-1001) To add an exception for this directory, call: git config --global --add safe.directory '%(prefix)///Qnap/Public/GIT-Re pos/git_tests_001.git' kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git $
Um das Rechteproblem zu lösen mus aus dem lokalen Repository heraus folgender Befehl ausgeführt werden:
kpsto@Alice MINGW64 /c/users/peter/Documents/git_tests (master) $ git config --global --add safe.directory '//Qnap/Public/GIT-Repos/git_tests_001.git' kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git (BARE:master) $ git config --global --get-all safe.directory %(prefix)///QNAP/Public/Projekte/HOME/Markiese %(prefix)///QNAP/Public/Projekte/OTA/My-Micropython-OTA-Updater %(prefix)///QNAP/Public/GIT-Repos/My-OTA_2 %(prefix)///QNAP/Public/GIT-Repos/Markiese //Qnap/Public/GIT-Re pos/git_tests_001.git %(prefix)///Qnap/Public/GIT-Re pos/git_tests_001.git //Qnap/Public/GIT-Re pos/git_tests_001.git //Qnap/Public/GIT-Repos/git_tests_001.git //Qnap/Public/GIT-Repos/git_tests_001.git kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git (BARE:master) $
Save.directory sieht ziemlich chaotisch aus.
git Status funktioniert im entfernten Repository:
kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git (BARE:master) $ git status fatal: this operation must be run in a work tree kpsto@Alice MINGW64 //Qnap/Public/GIT-Repos/git_tests_001.git (BARE:master) $
Nur ein entferntes Repository anlegen
Links: