GIT: Unterschied zwischen den Versionen
(→Script) |
(→Script) |
||
Zeile 121: | Zeile 121: | ||
commitText="$*" | commitText="$*" | ||
else | else | ||
− | read -p "Commit | + | read -p "Commit description: " commitText |
fi | fi | ||
Version vom 23. November 2021, 19:20 Uhr
Achtung: Ich bin purer Anfänger in GIT und ich notiere hier meine ersten Versuche.
- Es kann sein, dass ich manches falsch verstehe und daher diese Informationen zum Teil falsch sind.
Config
Die zentrale Konfigurationsdatei ist im Homeverzeichnis
~/.gitconfig
- Branches ohne Pager auflisten
Standardmäßig wird zur Anzeige ein Pager verwendet, z.B. less
- Um das zu verhindern:
git config --global pager.branch false
- Difftool konfigurieren
git config --global difftool.prompt false git config --global diff.tool kdiff3
- Difftool soll keine Backupdateien erzeugen
Standardmäßig erzeugt GIT nach dem Zusammenführen im Arbeitsverzeichnis eine *.orig
Datei. Folgendes Kommando verhindert dies.
git config --global mergetool.keepBackup false
Branches
Branches anzeigen. Der aktive Branch wird farblich hervorgehoben - openSuse
git branch
Einen neuer Branch beginnen
git checkout -b "testbranch"
Zum neuen Branch wechseln
git checkout "testBranch"
Eine Datei zu einem anderen Branch verschieben
git add . git commit -m "alles fertig" git checkout anderer_branch ./file.php
Einen Branch löschen
git branch -d "hotfix_1"
Branches zusammenführen
Voraussetzung: Alle Änderungen commiten, dann
git checkout master git merge "testbranch"
Merge Konflikt
Wenn nicht alle Dateien automatisch zusammengeführt werden können, so gibt es eine Meldung
- Der Editor Kate zeigt die Konflikte an. Nach durchgeführten Änderungen einen Commit machen
# Beispiel git add project/view/file.php git commit
Merge wiederholen
git merge "testbranch
Branch umbenennen
Aktueller Branch
git branch -m neuer_Name
Irgendein Branch
git branch -m alter_Name neuer_Name
Commits
Geänderte Dateien anzeigen
git status
Dateien vergleichen
- Eine bestimmte Datei in verschiedenen Branches vergleichen
git diff master branch_test datei.php
Datei in grafischem Difftool anzeigen und bearbeiten (Konfiguration siehe oben)
git difftool master branch_test datei.php
Dateien ignorieren
- Eine globale
.gitignore
Datei anlegen
touch ~/.gitignore_global
- GIT Konfiguration ändern
git config --global core.excludesfile ~/.gitignore_global
- Excludefile bearbeiten
# Beispiel tmp/
- Dateien aus dem Repo entfernen
git rm --cached tmp/*
Zu einem früheren Commit wechseln
Änderungen verwerfen
git restore <Datei>
Alle Änderungen im Arbeitsverzeichnis vor einem Commit rückgängig machen
git checkout HEAD *
Die Änderungen werden aus der Staging Area entfernt.
Zu einem früheren Commit zurückkehren
- Zuerst die Commits anzeigen
git log
Commits verwerfen
Zu einem bestimmten Commit zurückkehren und alle späteren Änderungen verwerfen
git reset --hard 8a0181d7b38472a04d90b64dd84a8bc62d138686
Alle Änderungen nach dem Commit 8a0181d7b38472a04d90b64dd84a8bc62d138686
sind hiermit verworfen.
In der Hierarchie zurückgehen
- Zwei Schritte zurück
git checkout HEAD~2
Man befindet sich nun im Zustand eines losgelösten HEAD.
Hier kann man einen neuen Branch beginnen
git checkout -b <branch_name>
- Zurück zu einem bestimmten Commit
Zuerst den Hash Code des Commits ermitteln
git log
Im folgenden Beispiel wird zu diesem Commit gewechselt und zugleich ein neuer Branch erzeugt
git checkout -b <branch_name> b62c8bd940c04b758ceb0583aec84479ddc56a8b
Letzte Commit Beschreibung ändern
git commit --amend
oder
git commit --amend "neue Beschreibung"
Release numbering
Hier beschreibe ich meine Verwaltung der Versionsnummern
Bestandteile der Versionsnummer
Die Versionsnummer setzt sich aus drei Zahlen zusammen:
MAJOR.MINOR.PATCH Beispiel: 1.3.7
In diesem Beispiel ist festgelegt: MAJOR = 1, MINOR = 3, PATCH = 7
Versionsnummer ändern
MAJOR und MINOR vergebe ich explizit, wenn es für mich angebracht erscheint.
PATCH setze ich auf 0.
git tag -a 1.4.0 -m "feature description"
Bei jedem folgenden Commit soll PATCH um 1 erhöht werden.
Folgendes Script führt den Commit durch und erhöht die PATCH Nummer.
Script
#!/bin/bash # commit.sh if [ $# -gt 0 ] ; then commitText="$*" else read -p "Commit description: " commitText fi while [ ! -d .git ] ; do cd .. done projectDir=$(pwd) echo "------------------" echo $(pwd) git add . git commit -m "$commitText" NUMBER=$(git describe | tail -n 1) NUMBER=$(echo $NUMBER | cut -f 1 -d "-") MAJOR=$(echo $NUMBER | cut -f 1 -d ".") MINOR=$(echo $NUMBER | cut -f 2 -d ".") PATCH=$(echo $NUMBER | cut -f 3 -d ".") PATCH=$(expr $PATCH + 1) git tag -a $MAJOR.$MINOR.$PATCH -m "$commitText" echo "Version: $MAJOR.$MINOR.$PATCH"
Zuerst wird ein Commit durchgeführt.
Dann werden aus dem vorhanden git-tag die Bestandteile der Versionsnummer extrahiert. Die PATCH-Nummer wird um 1 erhöht.
Anschließend wird ein neuer git-tag erzeugt. git tag -a wird mit der neuen Versionsnummer als Parameter aufgerufen. Das Script zeigt die neue Versionsnummer an. build-number und Commit-Id werden unterdrückt.
Commits anzeigen
- Normale LOG Ansicht
git log
- Eine Zeile pro Commit
git log --pretty=oneline
Workflow
- Repo erstellen
git init
- Dateien zum Repo hinzufügen
git add .
- Commit
Nach Änderungen an Dateien, diese zum Repo hinzufügen
git add . git commit -m "Kommentar"
Submodules
Ein Verzeichnis mit mehrfach genutzten Bibliotheken kann man als Submodul zu einem Repo hinzufügen.
- Ich habe mich vorerst entschieden, meine Projekte ohne Submodules zu organisieren. Ich verwalte die gemeinsam genutzten Bibliotheken in einem eigenen GIT Repo. Um die Synchronisation kümmere ich mich manuell - ohne Verwendung von Submodules.
Include Repo anlegen
cd /srv/www/include git init git add .
Include Repo einbinden in das HauptRepo
cd /srv/www/htdocs/project mkdir includefiles git submodule add ./includefiles cd ./includefiles git add .
Arbeiten mit Submodules
- Alle GIT Befehle im Submodul Verzeichnis beziehen sich auf das Submodul.
- Nach einem Commit oder Branchwechsel im Projekt Repo muss das Submodul upgedatet werden.
git submodule update
Erst dann werden die Änderungen im Include Verzeichnis im Haupt Repo wirksam.