GIT: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: «== GIT Version System == <table width=100% cellspacing="5" align=center> <tr align=left> <td width=10% padding=1px><b>Icon</b></td><td width=20% padding=1px>…») |
(→Branching) |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == GIT Version | + | == GIT Version Control == |
+ | === Übersicht === | ||
+ | [[File:git.png]] | ||
+ | === Wichtige Links === | ||
+ | * [https://git-scm.com/book/de/v1/Los-geht%E2%80%99s-Git-Grundlagen Dokumentation] | ||
+ | * [https://education.github.com/git-cheat-sheet-education.pdf Cheat-Sheet] | ||
+ | * [https://git-scm.com/book/en/v2/Appendix-A%3A-Git-in-Other-Environments-Graphical-Interfaces Offizielle GIT GUIs ] | ||
+ | * [https://git-scm.com/downloads/guis Third Party GIT GUIs] | ||
+ | === Beschreibung === | ||
+ | Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv mit Zeitstempel und Benutzerkennung gesichert und können später wiederhergestellt werden. | ||
+ | (Quelle: [https://de.wikipedia.org/wiki/Versionsverwaltung Wikipedia]) | ||
+ | Im Unterschied zu anderen bekannten Produkte wie CVS, Subversion, Perforce, Bazaar usw. welche immer die Differenz, also die Deltas, der einzelnen veränderten Files speichern, macht GIT immer ein Snapshot der ganzen Repositories. | ||
+ | |||
+ | Alle Dateien in GIT haben einen von drei Zuständen: | ||
+ | * Committed (eingepflegt) | ||
+ | * Modified („geändert“) | ||
+ | * Staged („vorgemerkt“) | ||
+ | |||
+ | GIT kennt drei Hauptbereiche | ||
+ | * GIT Directory (Repository) -> Primäres Verzeichnis (Committed) | ||
+ | * Working Directory -> Files in Arbeit (Modified) | ||
+ | * Staging Area -> Bereit zur Einpflege (Staged) | ||
+ | |||
+ | == Installation == | ||
+ | Redhat: yum install git-core<br> | ||
+ | Debian: sudo apt-get install git | ||
+ | |||
+ | == Initiale Konfiguration == | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git config --global user.name "John Doe"</td><td padding=1px>Eigener Name hinterlegen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git config --global user.email johndoe@example.com</td><td padding=1px>Eigene E-Mail-Adresse hinterlegen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git config --global core.editor emacs</td><td padding=1px>Ein spezifischer Editor festlegen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git config --list</td><td padding=1px>Die Konfiguration anschauen</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | == Hilfe zu GIT == | ||
+ | git help <verb> | ||
+ | |||
+ | == Arbeiten mit GIT == | ||
+ | === Ein Repository einrichten === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>mkdir <Verzeichnis></td><td padding=1px>Ein leeres Verzeichnis erstellen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>cd <Verzeichnis></td><td padding=1px>In das angelegte Verzeichnis springen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git init</td><td padding=1px>GIT einrichten</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | <br> | ||
+ | Damit wird in diesem Verzeichnis das Unterverzeichnis .git angelegt | ||
+ | |||
+ | === Spezifische Dateien ignorieren === | ||
+ | Gewisse Dateien werden automatisch erstellt, z.B. Logfiles bei einem Testlauf, welche wir nicht in der Versionierung haben wollen. Diese können anhand bestimmter Muster in einem File ausgeschlossen werden.<br> | ||
+ | <p>Das File hat folgenden Namen: .gitignore</p> | ||
+ | Der Inhalt könnte wie folgt aussehen:<br> | ||
+ | <nowiki>*</nowiki>.[oa] -> Alle Files mit der Endung ".o" oder ".a"<br> | ||
+ | <nowiki>*</nowiki>.log -> Alle Files mit der Endung ".log" | ||
+ | |||
+ | === Ein Repository bevölkern === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>cd <Verzeichnis></td><td padding=1px>In das angelegte Repository springen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git add *</td><td padding=1px>Alle Dateien im Repository in die Staging Area laden</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git commit -m 'Initiale Version'</td><td padding=1px>Dateien in Repo aufnehmen</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | === Mit einem Repository arbeiten === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git status</td><td padding=1px>Zeigt den aktuellen Status des Repositories</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git diff</td><td padding=1px>Zeigt alle Unterschiede seit dem letzten commit</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git diff --cached</td><td padding=1px>Zeigt nur die Unterschiede in der Staging Area</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git add <Datei(en)></td><td padding=1px>Fügt die Datei(en) in die Staging Area ein</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git commit -m "Kommentar"></td><td padding=1px>Commitet all Dateien in der Staging Area</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | === Files löschen === | ||
<table width=100% cellspacing="5" align=center> | <table width=100% cellspacing="5" align=center> | ||
<tr align=left> | <tr align=left> | ||
− | < | + | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> |
</tr> | </tr> | ||
<tr align=left valign=middle> | <tr align=left valign=middle> | ||
− | <td padding=1px> | + | <td padding=1px>rm <Datei(en)></td><td padding=1px>Datei(en) physisch löschen</td> |
</tr> | </tr> | ||
<tr align=left valign=middle> | <tr align=left valign=middle> | ||
− | <td padding=1px> | + | <td padding=1px>git rm >Datei(en)></td><td padding=1px>Datei(en) zum Löschen in der Staging Area schreiben</td> |
</tr> | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git rm --cached <Datei(en)></td><td padding=1px>Löscht die Einträge wieder aus der Staging Area</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git commit -m "Kommentar"></td><td padding=1px>Commit der Löschung der Datei(en) in der Staging Area</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | === GIT History === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git log</td><td padding=1px>Zeigt die History der commits</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git log -p -2</td><td padding=1px>Zeigt nur die letzten beiden Einträge der Änderungen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git log --stat</td><td padding=1px>Zeigt eine Statistik über die Commits</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git log --since=2.weeks</td><td padding=1px>Zeigt nur die commits der letzten zwei Wochen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>gitk</td><td padding=1px>Graphische Version von git log</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | == Sonstige GIT Themen == | ||
+ | === Änderungen nach einem commit === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git commit -m "Kommentar"</td><td padding=1px>Normaler commit</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git add <Vergessene Datei></td><td padding=1px>Vergessene Datei nachträglich in Staging Area bewegen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git commit --amend</td><td padding=1px>Nachträglicher commit zu vorherigem</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | === Änderungen in der Staging Area === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git reset HEAD <Datei></td><td padding=1px>Datei aus der Staging Area löschen</td> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git checkout -- <Datei></td><td padding=1px>Änderungen in Datei gänzlich löschen</td> | ||
+ | </tr> | ||
+ | <table> | ||
+ | |||
+ | === Tagging === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git tag</td><td padding=1px>Zeit die aktuellen Tags an</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git tag v1.4.1</td><td padding=1px>Setzen eines einfachen Tag</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git tag -a v1.4 -m 'Version 1.4' </td><td padding=1px>Setzen eines kommentierten Tag</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git show v1.4</td><td padding=1px>Zeigt Infos zu diesem Tag</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git tag -a v1.2 -m 'Version 1.2' 9fceb02</td><td padding=1px>Commit nachträglich Taggen mit Angabe der Check-Nummer</td></tr> | ||
+ | <table> | ||
+ | |||
+ | === Cloning === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git clone grit.git mygrit</td><td padding=1px>Lokales Repository grit.git nach mygrit clonen</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git clone git://github.com/schacon/ticgit.git</td><td padding=1px>Ein remote GIT clonen</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git remote</td><td padding=1px>Zeigt den externen Server</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git fetch origin</td><td padding=1px>Lädt die veränderten Dateien vom Original Repository herunter</td</tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git push origin</td><td padding=1px>Lädt die Veränderungen aus dem lokalen Repository hoch</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git push origin v1.5</td><td padding=1px>Einen spezifischen Tag hoch laden</td></tr> | ||
+ | <table> | ||
+ | |||
+ | === Branching === | ||
+ | <table width=100% cellspacing="5" align=center> | ||
+ | <tr align=left> | ||
+ | <th width=40% padding=1px>Kommando</th><th padding=1px>Beschreibung</th> | ||
+ | </tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git branch testing</td><td padding=1px>Einen Branch erstellen</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git checkout testing</td><td padding=1px>Zum Branch testing wechseln</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git checkout -b testing</td><td padding=1px>Macht beides mit einem Kommando</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git checkout master</td><td padding=1px>Wieder zurück zum Master wechseln</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git branch –v</td><td padding=1px>Liste der Branches</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git merge testing</td><td padding=1px>Branch wieder in Master mergen. Braucht zuerst ein "git checkout master"</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git branch --merged</td><td padding=1px>Zeigt merged Branches</td></tr> | ||
+ | <tr align=left valign=middle> | ||
+ | <td padding=1px>git branch -d testing</td><td padding=1px>Löscht ein Branch z.B nach einem merge</td></tr> | ||
<table> | <table> |
Aktuelle Version vom 27. Oktober 2019, 19:56 Uhr
Inhaltsverzeichnis
GIT Version Control
Übersicht
Wichtige Links
Beschreibung
Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv mit Zeitstempel und Benutzerkennung gesichert und können später wiederhergestellt werden. (Quelle: Wikipedia)
Im Unterschied zu anderen bekannten Produkte wie CVS, Subversion, Perforce, Bazaar usw. welche immer die Differenz, also die Deltas, der einzelnen veränderten Files speichern, macht GIT immer ein Snapshot der ganzen Repositories.
Alle Dateien in GIT haben einen von drei Zuständen:
- Committed (eingepflegt)
- Modified („geändert“)
- Staged („vorgemerkt“)
GIT kennt drei Hauptbereiche
- GIT Directory (Repository) -> Primäres Verzeichnis (Committed)
- Working Directory -> Files in Arbeit (Modified)
- Staging Area -> Bereit zur Einpflege (Staged)
Installation
Redhat: yum install git-core
Debian: sudo apt-get install git
Initiale Konfiguration
Kommando | Beschreibung |
---|---|
git config --global user.name "John Doe" | Eigener Name hinterlegen |
git config --global user.email johndoe@example.com | Eigene E-Mail-Adresse hinterlegen |
git config --global core.editor emacs | Ein spezifischer Editor festlegen |
git config --list | Die Konfiguration anschauen |
Hilfe zu GIT
git help <verb>
Arbeiten mit GIT
Ein Repository einrichten
Kommando | Beschreibung |
---|---|
mkdir <Verzeichnis> | Ein leeres Verzeichnis erstellen |
cd <Verzeichnis> | In das angelegte Verzeichnis springen |
git init | GIT einrichten |
Damit wird in diesem Verzeichnis das Unterverzeichnis .git angelegt
Spezifische Dateien ignorieren
Gewisse Dateien werden automatisch erstellt, z.B. Logfiles bei einem Testlauf, welche wir nicht in der Versionierung haben wollen. Diese können anhand bestimmter Muster in einem File ausgeschlossen werden.
Das File hat folgenden Namen: .gitignore
Der Inhalt könnte wie folgt aussehen:
*.[oa] -> Alle Files mit der Endung ".o" oder ".a"
*.log -> Alle Files mit der Endung ".log"
Ein Repository bevölkern
Kommando | Beschreibung |
---|---|
cd <Verzeichnis> | In das angelegte Repository springen |
git add * | Alle Dateien im Repository in die Staging Area laden |
git commit -m 'Initiale Version' | Dateien in Repo aufnehmen |
Mit einem Repository arbeiten
Kommando | Beschreibung |
---|---|
git status | Zeigt den aktuellen Status des Repositories |
git diff | Zeigt alle Unterschiede seit dem letzten commit |
git diff --cached | Zeigt nur die Unterschiede in der Staging Area |
git add <Datei(en)> | Fügt die Datei(en) in die Staging Area ein |
git commit -m "Kommentar"> | Commitet all Dateien in der Staging Area |
Files löschen
Kommando | Beschreibung |
---|---|
rm <Datei(en)> | Datei(en) physisch löschen |
git rm >Datei(en)> | Datei(en) zum Löschen in der Staging Area schreiben |
git rm --cached <Datei(en)> | Löscht die Einträge wieder aus der Staging Area |
git commit -m "Kommentar"> | Commit der Löschung der Datei(en) in der Staging Area |
GIT History
Kommando | Beschreibung |
---|---|
git log | Zeigt die History der commits |
git log -p -2 | Zeigt nur die letzten beiden Einträge der Änderungen |
git log --stat | Zeigt eine Statistik über die Commits |
git log --since=2.weeks | Zeigt nur die commits der letzten zwei Wochen |
gitk | Graphische Version von git log |
Sonstige GIT Themen
Änderungen nach einem commit
Kommando | Beschreibung |
---|---|
git commit -m "Kommentar" | Normaler commit |
git add <Vergessene Datei> | Vergessene Datei nachträglich in Staging Area bewegen |
git commit --amend | Nachträglicher commit zu vorherigem |
Änderungen in der Staging Area
Kommando | Beschreibung |
---|---|
git reset HEAD <Datei> | Datei aus der Staging Area löschen |
git checkout -- <Datei> | Änderungen in Datei gänzlich löschen |
Tagging
Kommando | Beschreibung |
---|---|
git tag | Zeit die aktuellen Tags an |
git tag v1.4.1 | Setzen eines einfachen Tag |
git tag -a v1.4 -m 'Version 1.4' | Setzen eines kommentierten Tag |
git show v1.4 | Zeigt Infos zu diesem Tag |
git tag -a v1.2 -m 'Version 1.2' 9fceb02 | Commit nachträglich Taggen mit Angabe der Check-Nummer |
Cloning
Kommando | Beschreibung |
---|---|
git clone grit.git mygrit | Lokales Repository grit.git nach mygrit clonen |
git clone git://github.com/schacon/ticgit.git | Ein remote GIT clonen |
git remote | Zeigt den externen Server |
git fetch origin | Lädt die veränderten Dateien vom Original Repository herunter</td |
git push origin | Lädt die Veränderungen aus dem lokalen Repository hoch |
git push origin v1.5 | Einen spezifischen Tag hoch laden |
Branching
Kommando | Beschreibung |
---|---|
git branch testing | Einen Branch erstellen |
git checkout testing | Zum Branch testing wechseln |
git checkout -b testing | Macht beides mit einem Kommando |
git checkout master | Wieder zurück zum Master wechseln |
git branch –v | Liste der Branches |
git merge testing | Branch wieder in Master mergen. Braucht zuerst ein "git checkout master" |
git branch --merged | Zeigt merged Branches |
git branch -d testing | Löscht ein Branch z.B nach einem merge |