Using Git on Windows with Powershell

This tutorial will show you how to install Git for Windows and use it with Windows Powershell. It does not contain any tutorial to get started with Git as there are plenty of them all over the Internet.

Git for Windows is simply Git, compiled for Windows. It comes with the same Tk-based GUI tools as Git on Linux: a commit tool (launched with the command git gui) and a repository browsing tool (launched with the command gitk). In addition, there exists a set of Powershell script to facilitate the use of Git with Windows Powershell, namely Posh-git. Finally, Console2 will make the shell look prettier and more easy to use than with its default interface.

By the way, here is a cool (and simple) tutorial to get quickly started with Git! Actually, there are plenty of it, simply type git quick tutorial on Google fore more results. Finally, if you’re searching for a good cheat sheet for Git, you might appreciate this interactive Git cheat sheet.

Installing Git for Windows

Download Git for Windows on http://msysgit.github.io/.

Note: the difference between msysgit and Git for Windows is that msysgit = msys + git, i.e. what you need to develop and compile Git whereas Git for Windows is Git, compiled for Windows.

Installation steps:

  1. Choose the following installation folder: C:\Users\<User>\AppData\Local\Programs\Git;
  2. If you want, you can enable the Windows Explorer integration (personally, I disable it);
  3. Use Git from the Windows Command Prompt (second bullet), to add Git in your user path to use Git avec Powershell;
  4. Use OpenSSH;
  5. Checkout Windows-style and commit with Unix-style line endings.

Once Git is installed, display your Path environment variable and check that the Git folder was added to it during installation:

($env:path).Replace(';',"`n")

Configure Git when using it for the first time:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

For more config info, see the Pro Git reference book available at http://git-scm.com/book/en/v2.

The next step is to configure your system to be able to use Git with Windows Powershell. I advise you to use PowerShell instead of the default Windows command prompt. Use Console 2 to improve your Powershell experience.

Utiliser Powershell via Console2

Nous commençons par l’installation de Console2. Il y a deux options: soit télécharger Console2 depuis la page officielle, soit utiliser la version .zip que j’ai déjà modifiée moi-même pour y ajouter une configuration vers Powershell (et Bash) ainsi que des icônes pour Powershell (et Bash). Je suppose ici que c’est ma version .zip qui va être utilisée. Dans ce cas, la configuration de Console2 est déjà faite, mais il vaut tout de même mieux lire tout ce tutoriel jusqu’au bout.

  • Téléchargez Console2 soit depuis la page officielle soit depuis la version préconfigurée que je fournis.
  • Installez ou dézipper les fichiers dans C:\Users\<User>\AppData\Local\Programs\Console2.

On peut maintenant passer à la configuration de Console2. En gros, toute la configuration se trouve dans le fichier console.xml situé à côté de l’exécutable de Console2 (Console.exe). Cette configuration sera chargée par Console2 pourvu que la case à cocher située en-bas à gauche des options de configuration (accessibles via Edit --> Settings...) soit décochée. En effet, on ne veut pas Save settings to user directory, car cela va sauver et charger la configuration via C:\Users\<UserName>\AppData\Roaming\Console\console.xml.

Voici diverses notes pratiques utiles à savoir:

  • Il est possible de changer l’icône par défaut de Console2 (qui n’est pas très jolie je trouve) par une icône Powershell (fournie dans le fichier zip).
  • Pour configurer plus en détails Console2, lancer le programme et aller dans Edit --> Settings....
  • Pour bénéficier des couleurs dans Powershell via Console2, il faut décocher la case “Custom Color” qui écrase les couleurs du shell. Ce réglage se trouve dans la rubrique “Appearance” des paramètres.
  • La version de PowerShell installée nativement sur Windows 7 et suivants et bien la version 2.0. Pour s’en assurer, exécuter la commande suivante: $PSVersionTable.

Voici enfin des infos utiles pour la configuration de Console2 pour utiliser Powershell:

  • Shell: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Startup dir: %HOMEDRIVE%%HOMEPATH% pour démarrer dans le répertoire ‘home’ de l’utilisateur
  • Startup dir alternatif: C:\Users\<User>

Installing Posh-git

Il faut tout d’abord autoriser l’exécution des scripts PowerShell non signés.

  • Démarrer PowerShell en mode administrateur (recherche ‘PowerShell’ dans le menu Démarrer + clic droit et démarrer comme admin).
  • Taper la commande suivante: Set-ExecutionPolicy Unrestricted.
  • Confirmer (taper ‘O’).
  • Par sécurité, faire pareil pour la version 32 bits de l’exécutable PowerShell (nommée PowerShell (x86)).

Note

Pour vérifier la politique d’exécution des script, exécuter la commande suivante: Get-ExecutionPolicy (ça doit renvoyer ‘Unrestricted’ normalement).

To install Posh-git, go to http://psget.net/ and install PsGet first. Execute the following instruction to install PsGet:

(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex

Then install Posh-git with the following command:

Install-Module posh-git

Modules are installed in C:\Users\<User>\Documents\WindowsPowerShell\Modules.

To properly use Git with Powershell and Posh-git, you need to add the “bin” folder of the Git installation folder to your path as well, because this is where ssh-agent is located. You also need to execute the example profile provided by Posh-git. Here are the lines in my Powershell profile concerning Git:

# Git and Posh-git
$git_root = (Resolve-Path "$env:LOCALAPPDATA\Programs\Git")
$env:Path = $env:Path + ";" + (Resolve-Path "$git_root\bin")
. 'C:\Users\Allan\Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1'

Note sur le Powershell profile

Le profil Powershell, situé dans C:\Users\<User>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1, est exécuté à chaque démarrage de Powershell. C’est donc l’endroit idéal pour ajouter des commandes de configuration personnalisées de Powershell. Si jamais il n’y a pas de dossier WindowsPowerShell dans votre dossier Documents, vous devez le créer.

Voici par exemple le fichier de profile que j’utilise:

# Git and Posh-git
$git_root = (Resolve-Path "$env:LOCALAPPDATA\Programs\Git")
$env:Path = $env:Path + ";" + (Resolve-Path "$git_root\bin")
. 'C:\Users\Allan\Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1'

# Modifies the PATH environment variable for this session
$env:Path = $env:Path + ";" + (Resolve-Path "$env:USERPROFILE\Dropbox\Software\PowerShell\scripts")
$env:Path = $env:Path + ";" + (Resolve-Path "$env:USERPROFILE\Dropbox\Software\gnuplot\gnuplotscript\powershell")

# Creates aliases for the current shell session
new-alias sublime "C:\Program Files\Sublime Text 2\sublime_text.exe"
new-alias sumatra (Resolve-Path "$env:USERPROFILE\Dropbox\Software\SumatraPDF\SumatraPDFPortable\SumatraPDFPortable.exe")
new-alias make mingw32-make
new-alias diff_gnu (Resolve-Path "$git_root\bin\diff.exe")

# Jumps to Dropbox root folder
cd (Resolve-Path "$env:USERPROFILE\Dropbox")
  • Tout d’abord, on y retrouve les commandes de configuration pour Git, qui effectue les actions suivantes:

    • Définit le dossier d’installation de Git.
    • Ajoute le dossier contenant les exécutables de Git au Path.
    • Lance le profil générique de Posh-git.
  • Ensuite, j’ajoute moi-même au Path un dossier contenant les différents scripts Powershell que j’utilise. On voit donc ici qu’il y a un autre moyen de modifier le Path que celui décrit ici (i.e. en modifiant le Registre). Toutefois, les variables d’environnement créées ou modifiées via le profile ou directement dans le shell disparaissent quand l’instance courante du shell est fermée. Il faut donc les recréer à chaque nouveau démarrage de Powershell (via le profile, typiquement) alors que les variables d’environnement inscrites dans le Registre sont persistantes et accessibles à tous les programmes de l’ordinateur même s’ils ne sont pas lancés depuis Powershell (c’est utile quand on lance un compilateur depuis un IDE comme Visual Studio, par exemple).

  • Par après, je crée des alias vers différents programmes que j’utilise couramment.

  • Enfin, je fait démarrer Powershell dans ma Dropbox car c’est là que je travaille la plupart du temps.

Si vous voulez en apprendre plus sur Powershell, je vous conseille de commencer par le site PowerShellPro qui contient une série de tutoriels très bien faits pour démarrer avec Powershell.