hinweis
Dieses Tutorial stellt einen Auszug aus meiner persönlichen Weiterbildung dar, daher sind die Informationen in kompakter Stichpunktform präsentiert.
Einführung in Git mithilfe von PowerShell
Git Allgemein
Was ist git?
- Open Source Versionskontrolle
- sehr schnell und effizient
- kein Netzwerk erforderlich
- große Verbreitung
- große Community
- GitHub sehr bekannt
- Multi-platform
- Linux
- Mac
- Windows
- command-line basiert
- gut für Automatisierung
- scripting
- integriert in vielen GUIs
Woher kommt git?
- kommt aus dem Linux Umfeld
- Entwickler: Linus Torvalds
Git Verzeichnis Struktur
- Konfigurationen bleiben erhalten, wenn zu anderer Umgebung gewechselt wird
Grundlegendes Konzept
COMMIT
Snapshot der Repository
BRANCH
Ein Favorit der auf ein commit zeigt
TAG
Beschreibung für eine Sammlung von commits
Konzept für Zusammenarbeit
REMOTE
origin -> Ursprung
Lokale Kopie, Remote Host, Netzlaufwerk
CLONE
Kopie Repository von remote auf dem lokalen PC mit der History von git und alle commits
Philosophie
- master / main branch
- alles was im master branch ist deployable (einsetzbar)
- getestet
- Neue features, fixes werden in eigenem branch entwickelt
- branch nach feature, fix benennen
- häufig und früh commiten
- so bleibt es nachvollziehbar
- der lokale branch und remote branch sollten die selben Namen haben
Praxis
Voraussetzung PowerShell
Das Module posh-git kann installiert werden, um git Support direkt im Powershell Terminal zu erhalten.
# Powershell Gallery einbinden
$webclient = New-Object System.Net.WebClient
$webclient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
[Net.ServicePointManager]::SecurityProtocol = "tls12"
Register-PSRepository -Default -Verbose
# Module installieren
Install-Module posh-git
# Module muss jedes mal importiert werden
Import-Module posh-git
# Es kann aber auch im Profile hinterlegt werden
Add-PoshGitToProfile
Git Config initialisieren
# config initialisieren
git config --global user.email "hoell@hl-dev.de"
git config --global user.name "David Höll"
# config prüfen
Vorbereitung, repository erstellen
# Ordner erstellen
New-Item -Path testDirectory -ItemType Directory
# zu Ordner navigieren
Set-Location -Path .\testDirectory
# Ordner zeigen
Start-Process .
# repository initialisieren
git init
# Ordner zeigen
Start-Process .
# .git Ordner -> config etc.
Zur Repository hinzufügen
Add-Content -Value "Hello this is my file" -Path "./myfile.txt"
# show files
Get-ChildItem
# Status zeigen
git status
# myfile.txt -> ist wird noch nicht getrackt von git
# my file tracken
git add .\myfile.txt
# oder
git add .
# Status zeigen
git status
# myfile.txt wurde von workspace -> zur staging area verschoben
git commit -m "feat: create a new file for testing"
# Status zeigen
git status
Hilfe
# weitere Befehle anzeigen oder google benutzen
git help add
# myfile.txt zur repository hinzufügen
Veränderte Dateien
# Änderungen hinzufügen
Add-Content -Value "This is the second line in my testfile" -Path "./myfile.txt"
# Status zeigen
git status
# Änderungen in repository schreiben
git add .
git commit -m "feat: second test line in myfile"
# oder -am -> add, commit
git commit -am "feat: second test line in myfile"
# Status zeigen
git status
git history
# Historie anzeigen
git log
# Hilfe anzeigen
git help log
# z.B.:
git log --pretty=oneline
git checkout, reset
# Änderungen hinzufügen
Add-Content -Value "This is a bad line of code" -Path "./myfile.txt"
# Inhalt zeigen
Get-Content -Path "./myfile.txt"
# Status zeigen
git status
# Workspace -> Staging
git add myfile.txt
git status
# Workspace <- STaging
git reset myfile.txt
git status
# file auf head setzen
git checkout myfile.txt
git status
# Inhalt zeigen
Get-Content -Path "./myfile.txt"
git reset --hard
# Änderungen hinzufügen
Add-Content -Value "This is a bad line of code" -Path "./myfile.txt"
# neue Dateien anlegen
New-Item test1.txt
New-Item test2.txt
git status
# Workspace (Alle Dateien) -> Staging
git add .
# Head <- Staging (Alle Dateien)
git reset --hard
git status
git revert
- Setzt den commit zurück
- und erstellt einen neuen Commit
# Änderungen hinzufügen
Add-Content -Value "This is a bad line of code" -Path "./myfile.txt"
Get-Content -path "./myfile.txt"
# Workspache --> Repository
git commit -am "feat: This my new nice feature"
# history anzeigen
git log
# commit zurücknehmen über die commit id (kann in der history nachgeschaut werden)
git revert 21a509d48349d84e03d5779017adf9541c1cffec
Get-Content -path "./myfile.txt"
# history anzeigen
git log
git branch
branch basics
# branches zeigen
git branch
# neuen branch aus dem letzten commit des aktuellen branches erstellen
git branch mybranch
git branch
# branch wechseln
git checkout mybranch
git branch
git checkout master
# delete branch
git branch mybranch123
git branch
git branch -D mybranch123
git branch
# branch erstellen und direkt in branch wechseln
git checkout -b mybranch12345679
git branch
branch implement a feature
git checkout master
# file anlegen und commiten
Add-Content -Value "This is a bad line of code" -Path "./myfile.txt"
Get-Content -path "./myfile.txt"
git add .
git commit -m "feat: This my new nice feature"
git status
# branch wechseln
git checkout -b feature/delete_file
Get-ChildItem
Remove-Item .\myfile.txt
Get-ChildItem
git commit -am "feat: delete my file."
# in master branch wechseln
git checkout master
Get-ChildItem
git checkout feature/delete_file
Get-ChildItem
merge a file
git checkout master
# neuen branch restellen
git checkout -b feature/add_files
# Dateien erstellen und commiten
New-Item myfile4.txt
New-Item myfile5.txt
New-Item myfile6.txt
Get-ChildItem
git add .
git status
git commit -m "feat: add 3 files"
# code review etc und dann in master mergen
git branch
git checkout master
git merge feature/add_files
# History zeigen
git log