Die Übersichtlichkeit der Seite wird durch Javascript erhöht. Ist dies aktiviert, werden die Texte unter den Überschriften durch Anklicken der Überschriften ein- und ausgeblendet.
Git ist ein Versionskontrollsystem Dabei wird immer mit vollständigen lokalen Kopien gearbeitet, die bei Bedarf von einem REMOTE-Ordner heruntergeladen oder hochgeladen werden.
Das Projektverzeichnis ist das Arbeitsverzeichnis. Es enthält einen Unterordner .git. In diesem Unterordner befindet sich die eigentliche Datenbasis, das Repository. Im Projektverzeichnis werden ansonsten ausschließlich die Dateien gelistet, an denen man gerade arbeitet - man spricht hier allgemein vom Arbeitsverzeichnis . Dies können von git gesteuert in underschiedlichen Entwiklungszweigen, sogenannten Branches, unterschiedliche Dateien sein. Des weiteren wird im Repository eine sogenannte Staging Area verwaltet. Das ist eine Datei innerhalb des .git-Verzeichnisses, die alle Informationen darüber enthält, was man expliziet für einen sogenannten neuen Commit ausgewählt hat, wobei ein Commit einfach nur die Aufnahme von Änderungen im in das aktuelle Repository bedeuted.
Dateien können 3 verschiedene Zustände haben:
Somit gilt, wenn eine Version einer Datei im .git-Verzeichnis gespeichert ist, dann ist diese committet , wenn die Datei geändert und der Staging-Area hinzugefügt wurde, dann ist diese staged und wenn Sie geändert aber nicht der Steaging-Area hinzugefügt wurde, ist sie modified .
Dabei steigt die Priorität von System über Global bis zum Projekt, dass heißt, die Projektkonfiguration übersteuert alle anderen.
git-config --global user.name "John Doe" git config --global user.email johndoe@example.com git config --global core.editor emacs
Github und die Einbindung eines bestehenden lokalen Projektes
Standard: zunächst lokal versioniert
git init
Auf Github ein Repository anlegen und die Adresse kopieren. Diese ist unter dem Button 'Clone or download' zu finden.
Beispiel mit der Adresse: https://github.com/easymf74/Test.git
$ git remote add hub https://github.com/easymf74/Test.git $ git pull hub master remote: Counting objects: 4, done. remote: Compressing objects: 100% (3/3), done. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 Entpacke Objekte: 100% (4/4), Fertig. Von https://github.com/easymf74/Test * branch master -> FETCH_HEAD * [neuer Branch] master -> hub/master $ echo '.gitignore' >> .gitignore $ echo '*~' >> .gitignore $ echo '.[o]' >> .gitignore $ git add . $ git commit -m "Initial Commit" [master 8c3a1dd] Initial Commit 1 file changed, 3 insertions(+) create mode 100644 wichtig $ git push -u hub master Username for 'https://github.com': easymf74 Password for 'https://easymf74@github.com': Zähle Objekte: 3, Fertig. Delta compression using up to 2 threads. Komprimiere Objekte: 100% (3/3), Fertig. Schreibe Objekte: 100% (3/3), 340 bytes | 0 bytes/s, Fertig. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/easymf74/Test.git cd33ab8..8c3a1dd master -> master Branch master konfiguriert zum Folgen von Remote-Branch master von hub. $ git status Auf Branch master Ihr Branch ist auf dem selben Stand wie 'hub/master'. nichts zu committen, Arbeitsverzeichnis unverändert
Einrichtung eines localen Repositorys
Einfach im Projektordner folgenden Befehl absetzen:
git init
Alle eventuell zuvor vorhandenen Unterordner und Dateien sind nicht im Tracking der Versionskontrolle, solange wir sie nicht expliziet hinzufügen und initial comitten:
git add *.cpp git add *.h git add LICENSE git commit -m 'initial project version'
Klonen eines Remote-Verzeichnisses
git clon [URL] [ggf. NameZielverzeichnis]
Arbeiten mit der Versionscontrolle
Status in komprimierter Form. Dabei wird vor der datei oder dem Verzeichnis ein 2-spaltiger Stausindikator angezeigt.
Der Befehl ändert die Ausgabe der Log-Datei
git log -- pretty=format:"..."
Für ... können folgende Formatoptionen angegeben werden
Beispiel:
git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 6 Years ago : changed the version number
git log --pretty format:"..." --graph
gibt einen ASCII-Graphen aus, der die Branch- und Merge- Historie anzeigt.
(oder statt --since, was für seit steht geht auch --until, was für bis steht)
Man kann hier Daten wie folgt spezifizieren:
Anzahl der letzten Commits die Angezeigt werden sollen
Beispiel:
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/
Manche Dateien möchte man generell von der Versionskontrolle ausschließen. Dies macht zum Beispiel bei für das kompilierte Programm Sinn oder ggf Log-Dateien oder Backups. Solche Dateien kann man in einer Datei .gitignore auflisten. Beispiele:
Folgende Regeln gelten für die Angaben in der Ignore-Datei:
Beispiele für Muster:
Für die Git-befehle lassen sich leicht Aliasnamen definieren, die die Eingabe der Befehle in der Zukunft verkürzen
git config --global alias.<kürzel> <Befehl> git config --global alias.co chackout git checkout entspricht danach git co
So lassen sich auch neue Befehle definieren:
git config --global alias.unstage 'reset HEAD --'
Damit kann statt:
git reset HEAD -- fileA
einfach geschrieben werden:
git unstage fileA
oder ein last -Kommando:
git config --global alias.last 'log -1 HEAD' ermöglicht: git last
Wenn man bereits an neuen Funktionen arbeitet, die allerdings noch nicht fertig gestellt sind, so dass man diese committen wollen würde, aber mann ggf. zunächst andere Änderungen, wie beispielsweise Bugfix an den bisherigen Code vornehmen möchte, so kann mann die derzeitige Arbeit zwischenspeichern, die Änderungen vornehmen und dann die zwischengespeicherte Arbeit wieder hervorholen, ohne dafür extra Branches anzulegen und halbfertige Arbeiten zu comitten. Dazu geht man wie folgt vor.
zwischenspeichern der bisherigen unvollständigen Arbeit
git stash
Danach hat man zunächst wieder den Stand vom letzten commit und kann die Änderungen daran vornehmen.
zum weiterarbeiten an der zwischengespeicherten Arbeit
git stash pop
Eine Datei kan man zum letzten Schnapschuß wie folgt ergänzen:
git commit -m 'Ich denke, ich habe alles' git add vergesseneDatei git add --amend
Dabei wird der letzte Schnapschuß überschrieben.
Ein Branch ist ein Pointer auf einen Versionsstand Der Pointer HEAD zeigt immer auf den aktuellen Branch
Auf github einfach ein Repository anlegen, ohne jedliche Einstellungen. Dann im localen Projektordner Github wie folgt bekannt machen und den aktuellen Stand hochladen. (Hierzu wird benutzername und Passwort benötigt)
git remote add hub https://github.com/easymf74/[REPOSITORY_NAME] git push -u hub master
Wichtige Stände können getaggt, also markiert werden. Es gibt zwei unterschiedliche Arten von Tags