Benutzer-Werkzeuge

Webseiten-Werkzeuge


git

Dies ist eine alte Version des Dokuments!


Prinzipien

  • alle Daten eines Repositories sind auf jedem Teilnehmer vollständig vorhand
  • nahezu alle Operationen laufen lokal ab (es bedarf grundsätzlich keines Servers)
  • Dateien die sich zwischen den Commits nicht ändern, sind nur Links die auf die zuletzt geänderte Version der Datei verweisen

Stadien

Stadium Wo
ModifiedWorking-DirectoryDie Datei wurde geändert, aber git wurde darüber noch nicht informiert.

Das Working Directory ist das Verzeichnis in dem der ausgecheckte Code „lebt“ und wo man ihn modifiziert
StagingStaging-AreaDie Datei wurde per „git add“ zum commit vorgemerkt.

Staging Area ist eine Datei im .git-Unterverzeichnis.
git status zeigt den Stand der Modifikationen an.
git diff –cached die Änderungen gegenüber der bereits commiteten Version
Commited.git-Directory/RepositoryDie Änderungen wurden ins Repository übertragen und sind permanent gespeichert.

git commit erledigt das.

Die Dateien liegen in der Verzeichnisstruktur unterhalb des Unterverzeichnis .git

Befehle

Clone

  • Lädt eine Kopie eines Remote-Repository

Syntax:

git clone <URL> [directory]
  • URL: URL des Remote-Repository
  • directory: Optional das Verzeichnis in welchem das heruntergeladene Repository abgelegt werden soll
    • ansonsten wird das letzte Verzeichnis im Quellpfad als Name genommen

add

  • Fügt eine Datei zum Tracking hinzu
  • oder zum Staging wenn sie schon im Tracking ist

Dateien im Repository-Verzeichnis werden nicht automatisch auf Änderungen hin überwacht.
Erst wenn sie per git add <Dateiname> zum tracking hinzugefügt wurden überwacht sie git.
Überwachen heißt das es bei einem commit weiß das die Datei geändert wurde und darauf hinweist, wenn sie nicht zu Staging hinzugefügt wurde (und damit nicht Teil des commits wird).
Um eine Datei die bereits getrackt wird zum staging hinzuzufügen benutzt man ebenfalls git add <Dateiname>.

Syntax:

git add <Dateiname>

Der Befehl unterstützt auch Wildcards.

status

  • Zeigt den Zustand von staging an (als Zusammenfassung der Änderungen)
  • es wird gelistet welche Dateien für ein commit vorgemerkt wurden
  • welche Dateien verändert wurden und nicht gestaged wurden (aber getrackt werden)
  • welche Dateien nicht getrackt werden

diff

  • Zeigt die konkreten Änderungen (Vergleicht den Quelltext) zwischen Working-Directory und staging
  • oder staging und Repository an

Ohne Parameter → Unterschied zwischen Working-Directory und staging.
Mit Parameter

--cache

→ Unterschied zwischen staging und Repository.

commit

  • Checked Staging ein
  • Die Änderungen werden fest ins Repository geschrieben und man kann später zu diesem Punkt zurückkehren

Syntax:

git commit

Optionen:

OptionBeschreibung
-mMessage.
Bei jedem Commit muss eine kurze Beschreibung der Änderungen angegeben werden. Normalerweise wird dazu interaktiv ein Editor geöffnet. Mit „-m“ kann die Nachricht gleich hinter der Option angegeben werden
-aÜberspringt das staging-Area.

Mit der Option werden alle geänderten und getrackten Dateien automatisch gestaged und commited - der Umweg über git add fällt weg - es lassen sich aber dadurch auch keine Dateien selektiv zum zum commit hinzufügen oder weglassen.
--amend
Überschreibt den letzten Commit mit einem neuen commit.

Sinnvoll wenn man beim eigentliche commit zum Beispiel Dateien vergessen hat oder die Beschreibung falsch war.

rm

Entferne Dateien komplett oder nur aus dem Tracking und damit aus dem Repository.

Syntax:

git rm <Dateiname/Verzeichnisname>

Ohne Optionen wird die Datei aus dem Dateisystem und aus dem Tracking und damit aus Staging und damit aus zukünftigen commits entfernt.

Option Beschreibung
–cachedLöscht die Datei nur aus dem Tracking und damit aus zukünftigen adds zu Staging und commits. Die Datei bleibt aber im Dateisystem vorhanden
-fWurde die Datei bereits zu Staging via git add hinzugefügt und nicht commited, kann mit -f erzwungen werden das sie aus Staging herausgenommen wird

mv

Verschiebt/benennt eine Datei im Working Directory um und git bekommt es mit.

Grundsätzlich könnte man auch das normale mv/verschieben nehmen und die Datei per git rm unter altem Namen löschen und mit git add unter neuem Namen wieder hinzufügen und git wüsste in der Regel immer noch das es die gleiche Datei ist.

log

Zeigt den Veränderungsverlauf der eingecheckten/commitetten Daten.

Per Default wird nur eine Zusammenfassung angezeigt und die Prüfsumme des Commits an.

OptionBeschreibung
-pPatch - Zeigt zusätzlich die Veränderungen im Code an (in der Form wie patch sie ausgibt)
–statZeigt eine Verkürzte Statistik für jedes Commit an
–prettyErlaubt erweiterte Formatierung und benutzerdefinierte Formatierung der Ausgabe

Syntax: git log –pretty=<Option>

  • Option → Eine Option aus der unten stehenden Tabelle

^Option ^Beschreibung ^

shortKurze Ausgabe pro commit
fullLange Ausgabe
fullerSehr lange Ausgabe
formatEigenes Format für die Ausgabe jedes commits

format:<Format>
--graph
Graphische Darstellung, die Branches inkludiert.

Kann mit den anderen Optionen kombiniert werden

Filtern:

OptionBeschreibung
-nDie letzten -n Commits - n ist eine Zahl
--since/--after
Gebe nur commits aus die nach dem definierten Datum gemacht wurden.

Wobei Datum hier kein Datum sein muss, auch sowas wie '2007', '10.y','10 years' funktioniert
--until/--before
Zeige nur commits an die vor/bis zu einem bestimmten Datum eingecheckt wurden.

Die Syntax ist die gleiche wie
--since
--author
Filtert nach einem bestimmten Autor
--grep
Sucht im commit-String nach einer Zeichenkette
--all-match
Wurden mindestens ein
--grep

und mindestens ein

--author

angegeben, wird das als OR-Betrachtet - es muss also nur ein Kriterium zutreffen damit das Commit angezeigt wird.
Gleiches gilt wenn mehrere

--grep

-Optionen angezeigt werden.

--all-match

ändert das in AND

Dateien

.gitignore

  • Definiert Dateien die ignoriert werden
  • die Dateien werden auch mit git add .* nicht zu Staging hinzugefügt
  • sie werden in git status nicht als „nicht getrackte“ Dateien geführt
  • Datei befindet sich im Working-Directory
  • Wildcards werden unterstützt (Glob-Pattern)
  • die Zeichenketten werden auf die gesamte Verzeichnisstruktur im Arbeitsverzeichnis angewendet

Beispiel:

*test.py
*[ao].py

Ignoriert alle Dateien die auf test.py enden oder auf a.py oder o.py enden.

Folgende Zeichen haben neben den üblichen Wildcards eine spezielle Bedeutung:

ZeichenBedeutung
/
  • Am Beginn eines Ausdrucks → wende den Ausdruck nicht auf tiefer liegende Ebenen an (Recursiv)
  • Am Ende eines Ausdrucks → der Ausdruck meint ein Verzeichnis/Verzeichnisse auf die das Pattern zutrifft
!
Negiert den Ausdruck

Unterstützte Glob-Pattern:

Pattern Beschreibung
*Eine beliebige Menge beliebiger Zeichen
?Ein beliebiges Zeichen
[ZeichenZeichenZeichen]Liste von möglichen Zeichen die an der Stelle stehen können
[Zeichen-Zeichen]Bereich von Zeichen die an der Stelle stehen können
**Wendet es auf alle Unterverzeichnisse und Unterverzeichnisse an - steht für eine beliebig tiefe Verzeichnisstruktur
git.1540916372.txt.gz · Zuletzt geändert: 2018/10/30 17:19 von root