Powershell: GIT einrichten, posh-git
Powershell: GIT einrichten, posh-git

Das mit grossen Abstand am verbreitete Versionskontrollsystem der Welt ist heutzutage Git. Git ist ein stabiles, aktiv gepflegtes Open-Source-Projekt, das 2005 ursprünglich von Linus Torvalds entwickelt wurde. Es gibt bis Dato keine bessere Alternative.

Was ist GIT?

Die Besonderheit des Tools besteht darin, dass zwar ein zentrales Repository für jedes Projekt existiert, alle beteiligten Benutzer sich aber eine lokale Arbeitskopie des Repositories auf den eigenen Client herunterladen. Jede dieser Kopien stellt ein vollständiges Back-up des Repositorys dar, weshalb eine durchgehende Netzwerkverbindung für den grundlegenden Arbeitsprozess nicht erforderlich ist. Zudem dienen die Kopien als Absicherung, falls das Haupt-Verzeichnis ausfallen sollte oder beschädigt ist. Vorgenommene Änderungen können jederzeit mit allen anderen Projektteilnehmern ausgetauscht, integriert oder verworfen werden.

Dieser Beiträg beschäftigt sich wie man Git auf einem Windows richtig installiert, worauf man achtet und wie man Powershell mit Git verheiratet. Dazu zeige ich wie man sein erstes Repository erstellt.

Damit man Git in Powershell verwenden kann muss man ein paar Programme/Module installieren. So muss man Git für Windows installieren. Der Download findet man unter https://git-scm.com/downloads

Installation "GIT for Windows"

Die Installation ist recht simple:

  • Mausklick "Next to the Public License"
  • Pfad so belassen "default location" Mausklick auf Next
  • Komponenten so belassen: (default components) Mausklick auf Next
  • Default für Start menu settings, Mausklick auf Next
  • Default VIM belassen, wer will kann aber auch den nano Editor benutzen, den viele als einfacher empfingen. Schlussendlich wird man in einem IDE Editor arbeiten.
  • Danach alles in den Default Settings belassen, d.h.  Mausklick auf Next
  • Hinweis: Wenn man Git from the command line nimmt. Muss man den internen Editor später manuell nachinstallieren und konfigurieren. Dies spielt aber keine Rolle da wir später in Visual Code das Commit machen.
  • Check-In / Check-Out  Wenn man auf einem Windows PC die Datein editiert kann man den Default verwenden:
    • "Checkout Windows-style, commit UNix-style line endings"
  • Wenn man von einem Linux-PC Datein editiert, dann muss man folgendes nehmen:
    • "Checkout as-is, commit Unix-style line endings

Jetzt wird das Programm installiert. Zum Schluss kann man die Release Notes deaktivieren und mit Finish den Installer beenden

Powershell GIT

Die zweite Komponente für Powershell und GIT ist Posh-Git. Ein Powershell-Modul welches den Umgang mit Git in Powershell vereinfacht. Dabei ist es nicht erfoderlich das es Powershellscripte sind. Es wird lediglich das Powershell um die Möglichkeit erweitert mit GIT zu arbeiten.

Das Powershell muss für die Installation in den Admin-Mode gestartet werden damit man Systemweit das Modul installieren kann. Am einfachsten nach Powershell suchen und mit Rechtsklick auf Powershell  Run as administrator:

 

 

 

 

 

Das Modul posh-git kann jetzt installiert werden. ggf. wird man gefragt ob man wegen dem NuGet provider abgefragt. Hier kann man mit "yes" beantworten:

Install-Module posh-git -force

Jetzt kann man einfach git im Powershell ausführen und erhält eine Hilfe:

git

Damit man es nachvollziehbar wer die Scripte bearbeitet hat sollte man folgende 2 Felder konfigurieren. Zum Schluss kann man noch kontrollieren ob die Werte gesetzt wurden:

git config --global user.name "mein Name"
git config --global user.email "meine E-Mail"

git config --get user.name

Ich empfehle jeweils das encoding auf utf8 zu setzen:

git config --global gui.encoding utf-8

Als erstes muss man einen ersten Ordner erstellen der unser zentrales Verzeichnis für die Repositories wird.

New-Item -ItemType Directory 'c:\Repos' -erroraction silentlycontinue

Danach wechseln wir in den Ordner:

Set-Location c:\Repos

Erstes Repo erstellen

Um ein erstes Repository zu erstellen müssen wir den init Befehl durchführen. Existiert der Ordner nicht, wird er erstellt: 

git init MeinErstesRepo
Initialized empty Git repository in C:/Repos/MeinErstesRepo/.git/

Es wird ein leeres Git repository intialisert. Dabei wird ein Ordner .git im Repository-Verzeichnis erstellt: C:/Repos/MeinErstesRepo/.git/ Hinsweis: Der Punkt vor dem Ordnernamen ist eine Konvention aus dem Linux. Ordner die einen Punkt als Prefix tragen werden Standardmässig unter Linux versteckt.

Das Repository anschauen

Wir wechseln ins Repository:

cd MeinErstesRepo

Das CmdLet Get-GitBranch ausführen und man erhält den aktuellen Status des Repo. In diesem Fall wäre es der Master. In der Regel arbeitet man im "master", d.h. man ist in der Produktiven Repository. Arbeitet man an verschiedenen Versionen, z.b. weil man im Team arbeitet kann man auch in einem sogenannten Branch arbeiten. Diese kann man dann später wieder in den Master "mergen", d.h. mischen. 

c:\Repos\MeinErstesRepo [master]> $(Get-GitStatus).Branch
master

Commits, oder Dateien dem Repository verheiraten

Wir erstellen einen Dummy-Text um unsere erste Datei um in das GIT-Repository hinzuzufügen:

New-Item datei.txt | Set-Content -Value "Das ist mein Hello World"

c:\Repos\MeinErstesRepo [master +1 ~0 -0 !]>

Hinweis: Sollte der Prompt immer noch gleich aussehen muss man das Modul laden  Import-Module PoSh-Git

Mit "git status" erhält man den aktuellen Status des Repository. Wir sehen +1, d.h. zum aktuellen Status hat Git bemerkt das es eine zusätzliche Datei gibt, aber noch nicht im Repository überwacht wird (untracked files).

c:\Repos\MeinErstesRepo [master +1 ~0 -0 !]> git status
On branch master

No commits yet

Untracked files:
(use "git add ..." to include in what will be committed)
    myfile.txt
nothing added to commit but untracked files present (use "git add" to track)

Wir sehen:

  • In welchem Branch wir sind (master)
  • Es hat keine Commits
  • wir sehen ein ungetrackte Datei
  • Einen Hinweis das wir doch die Datei dem Repo hinzufügen sollten

Wenn man mehr mit Git arbeitet werden die Befehle einfach einzutippen.

Datei hinzufügen

Um nun eine oder mehrere Dateien einer Versionsverwaltung hinzuzufügen nimmt man den git add Befehl. Um alle Datein im Repo hinzufügen kann man noch einen Punkt dem Befehl hinzufügen:

git add .

Wir haben nun die Datei der Staging Area hinzugefügt und der Prompt hat sich zu einem grünen +1 geändert, d.h. wir wissen das sich eine Datei geändert hat. Das sagt uns der Status:

  • Verzeichnis ist der branch "master"
  • Es gibt keine Commits
  • Eine Datei ist bereit für den Commit.
Nach dem Hinzufügen wird der Promtfarbe wieder normal
c:\Repos\MeinErstesRepo [master +1 ~0 -0 !]> git add .
c:\Repos\MeinErstesRepo [master +1 ~0 -0 ~]>

Mit dem Zusatz status erhalten wir den aktuellen Status des Repo:

git status

Wir erhalten folgenden Rückgabewert:

c:\Repos\MeinErstesRepo [master +1 ~0 -0 ~]> git status
On branch master

No commits yet

Changes to be committed:
(use "git rm --cached ..." to unstage)
    new file:   datei.txt 

Commit, oder die Änderungen dem Repo bekanntmachen

Commit: Erstellen

Mit einem Commit publizieren wir alle unsere Änderungen (innerhalb des Stages) des Codes an unser Repo. Sinnvoll ist es immer einen Kommentar mit dem Switch "-m" hinzuzufügen. Je mehr Leute mit dem gleichen Repo arbeiten sind solche Kommentare nachvollziehbarer. Sollte man es vergessen wird der interne Editor gestartet das man einen Kommentar hinzufügen muss.

git commit -m "Version 1.0"

Der Commit war erfolgreich und der Promot änder sich wieder.

c:\Repos\MeinErstesRepo [master +1 ~0 -0 ~]> git commit -m "Version 1.0"
[master as128a] Version 1.0
1 file changed, 1 insertion(+)
create mode 100644 datei.txt
c:\Repos\MeinErstesRepo [master]>

Commmit: Nachträgliche Änderungen (amend)

Sollte man nach dem Commit und vor dem push eine nachträglichen Änderung hinzufügen kann man diese folgendermassen druchführen:

git commit --amend

Commmit: Änderungen zurücknehmen (reset soft)

Hat man einen Fehler gefunden und muss zurück vor dem Commit gehen kann man das mit "reset" tun:

git reset --soft HEAD~1

Durch dieses Command wird der zuletzt in den HEAD aufgenommene Commit zurückgenommen. Die darin enthaltenen Dateien werden dabei wieder in den Status als „geplante Änderungen für den nächsten Commit“ zurückgesetzt.

Commit: Änderungen löschen (reset hard)

Will man alle Änderungen zurücksetzen kann man dies mit einem "reset hard"

git reset --hard HEAD~1

Zusammenfassung:

Wir haben nun unsere erste Version erzeugt. Dies ist die einfachste arbeitsweise und ist auf das lokale Repository beschränkt:

History, oder was ist passiert:

Um die verganen Commits anzuschauen gibt man git log ein:

c:\Repos\MeinErstesRepo [master]> git log
commit bbe188a3222574a09559a228c2be15b8aaa632 (HEAD -> master)
Author: Daniel Stastka <meine.mail@stastka.ch>
Date:   Tue Jul 01 23:02:05 2018 +0000
Version 1.0 

This shows the following information:

  • Der commit hash, ein eindeutiger Wert damit man nachvollziehbar machen kann.
  • Der Author mit Name und Email
  • Datum des Commits
  • Der Kommentar des Commits

Mit git log --oneline kann man den aktuellen Zustand des Repos in einer vereinfachter Version anschauen:

git log --oneline
9d8d134 (HEAD -> master) test
158588d Version 1.0
8b9f45a Version 1.1
git log hat noch zahreiche Parameter um detailiertere Informationen anzuzeigen:
  • -p    zeigt zusätzlich auch die Änderungen an, die in einem Commit enthalten sind
  • -2    listet nur die letzten beiden ausgeführten Commits auf
  • --stat    fügt jedem Eintrag eine Statistik hinzu, die aufzeigt, welche Dateien geändert und wie viele Zeilen hinzugefügt oder entfernt wurden
  • --pretty    ändert das Format der Ausgabe, wobei verschiedene Formate zur Verfügung stehen; --pretty=oneline ist z. B. ein mögliches Format, das alle Commits in einer einzelnen Zeile auflistet
  • --abbrev-commit    zeigt nur die ersten Zeichen einer SHA-1-Prüfsumme an
  • --relative-date    zeigt das Datum einer Änderung in relativem Format an (z. B. „vor drei Wochen“)

Interner Editor

Mit der Installation von Git wird ein Interner Editor installiert. Ich bevorzug hier VIM (oder auch vi), welches aber Geschmacksache ist. vi arbeitet jeweils mit so genannten Inline-Befehlen und ist für jemanden der keine Ahnung hat schwer zu Handhaben. Alternativ kann man den notepad++ als internen Editor konfigurieren:

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
VIM installieren (optional)

Da wir Git nicht mit Bash-Only installiert haben müssen wir VI noch manuell installieren:

Wenn jemand aber prinzipiell den -m beim Commit verwendet muss ich um den Editor nicht kümmern. Viele Produkte wie z.b. Visual Studio Code vereinfachen den Prozess.

GIT Config einsehen

Will man alle Einstellungen einsehen kann man dies mit git config:

git config --list

Posh-Git automatisch starten

Will man posh-Git automatisch starten und will nich jedes mal Import-Modul eintippen kann man dies mit folgenden CmdLet automatisieren:

Add-PoshGitToProfile

Dadurch verzögert sich das starten jeweils um ein paar Milisekunden, da er jedes mal starten des Powershell Prozesses das Modul läd.

Zusammenfassung

Mit posh-git erhält man eine Umfangreiches Werkzeug um seinen Powershell-Code zu Managen und zeigen das Git schon längst in der Powershell Welt angekommen ist. Mit einem Code Editor wie Visual Studio code hat man von Haus aus schone eine integrierte Versionierung und kann sich das posh-git Modul sparen.

Commands

Folgende Befehle muss man sich merken:

Befehl Funktion
git init     Erstellt ein leeres Repository
git add     Fügt ein odere mehrere Dateien in die "staging area"
git commit     Erstellt ein Commit der Dateien.
git status     Status des Repository
git log     Repository historie

 

Ausblick

Im nächsten Blogeintag über GIT werde ich mich mit "Lokalem" und "Remote" befassen und wie man einen Branch eröffnet.

 

 

 

Nichts gefunden

Es wurde zur Story Powershell: GIT einrichten, posh-git kein Kommentar gefunden

Information

Werbung oder Ähnliches sind nicht erlaubt, daher wird jeder Beitrag geprüft und freigegeben.
Advertising, etc. are not allowed, so any contribution is reviewed and approved.
Facebook-Webadress are not allowed, Facebook als Webadresse ist nicht erlaubt


* Die E-Mail wird nicht veröffentlicht / The email will not be published
** Bitte Zahl eintragen / Please enter the number
Ihr Kommentar
?
?
captcha Image?
?
 

Tippsammlung

Kleine Tippsammlung für mich und dijenige die sich auf meine Webseite verirrt haben.

Archiv

JahrArchiv
Tag(s):