Te sugerimos que pruebes esta solución en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Una forma más fácil sería simplemente instalar el módulo Powershell posh-git. Viene de la caja con el mensaje deseado:
el aviso
PowerShell genera su solicitud mediante la ejecución de una función de solicitud, si existe. posh-git define una función de este tipo en profile.example.ps1 que genera el directorio de trabajo actual seguido de un estado de git abreviado:
C:UsersKeith [master]>
Por defecto, el resumen de estado tiene el siguiente formato:
[HEAD-name +A ~B -C !D | +E ~F -G !H]
(Para instalar posh-git sugiero usar psget)
Si no tiene psget, use el siguiente comando:
(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex
Para instalar posh-git usa el comando:
Install-Module posh-git
Para asegurar cargas posh-git para cada shell, use el Add-PoshGitToProfile
mando.
Aquí está mi opinión al respecto. He editado un poco los colores para que sea más legible.
Microsoft.PowerShell_profile.ps1
function Write-BranchName ()
try
$branch = git rev-parse --abbrev-ref HEAD
if ($branch -eq "HEAD")
# we're probably in detached HEAD state, so print the SHA
$branch = git rev-parse --short HEAD
Write-Host " ($branch)" -ForegroundColor "red"
else
# we're on an actual branch, so print it
Write-Host " ($branch)" -ForegroundColor "blue"
catch
# we'll end up here if we're in a newly initiated git repo
Write-Host " (no branches yet)" -ForegroundColor "yellow"
function prompt
$base = "PS "
$path = "$($executionContext.SessionState.Path.CurrentLocation)"
$userPrompt = "$('>' * ($nestedPromptLevel + 1)) "
Write-Host "`n$base" -NoNewline
if (Test-Path .git)
Write-Host $path -NoNewline -ForegroundColor "green"
Write-BranchName
else
# we're not in a repo so don't bother displaying branch name/sha
Write-Host $path -ForegroundColor "green"
return $userPrompt
Ejemplo 1:
Ejemplo 2:
@Pablo-
Mi perfil de PowerShell para Git se basa en un script que encontré aquí:
Displaying GIT Branch on your PowerShell prompt
Lo he modificado un poco para mostrar la ruta del directorio y un poco de formato. También establece la ruta a la ubicación de mi contenedor Git ya que uso PortableGit.
# General variables
$pathToPortableGit = "D:shared_toolstoolsPortableGit"
$scripts = "D:shared_toolsscripts"
# Add Git executables to the mix.
[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";" + (Join-Path $pathToPortableGit "bin") + ";" + $scripts, "Process")
# Setup Home so that Git doesn't freak out.
[System.Environment]::SetEnvironmentVariable("HOME", (Join-Path $Env:HomeDrive $Env:HomePath), "Process")
$Global:CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$UserType = "User"
$CurrentUser.Groups | foreach
if ($_.value -eq "S-1-5-32-544")
$UserType = "Admin"
function prompt
# Fun stuff if using the standard PowerShell prompt; not useful for Console2.
# This, and the variables above, could be commented out.
if($UserType -eq "Admin")
$host.UI.RawUI.WindowTitle = "" + $(get-location) + " : Admin"
$host.UI.RawUI.ForegroundColor = "white"
else
$host.ui.rawui.WindowTitle = $(get-location)
Write-Host("")
$status_string = ""
$symbolicref = git symbolic-ref HEAD
if($symbolicref -ne $NULL)
$status_string += "GIT [" + $symbolicref.substring($symbolicref.LastIndexOf("/") +1) + "] "
$differences = (git diff-index --name-status HEAD)
$git_update_count = [regex]::matches($differences, "M`t").count
$git_create_count = [regex]::matches($differences, "A`t").count
$git_delete_count = [regex]::matches($differences, "D`t").count
$status_string += "c:" + $git_create_count + " u:" + $git_update_count + " d:" + $git_delete_count + "
else
$status_string = "PS "
if ($status_string.StartsWith("GIT"))
Write-Host ($status_string + $(get-location) + ">") -nonewline -foregroundcolor yellow
else
Write-Host ($status_string + $(get-location) + ">") -nonewline -foregroundcolor green
return " "
Hasta ahora, esto ha funcionado muy bien. Mientras está en un repositorio, el mensaje felizmente se ve así:
GIT [master] c:0 u:1 d:0 | J:Proyectosforksfluent-nhibernate>
*NOTA: Actualizado con sugerencias de Jakub Narębski.
- Se eliminaron las llamadas de estado de git branch/git.
- Se solucionó un problema en el que ‘git config –global’ fallaría porque $HOME no estaba configurado.
- Se solucionó un problema por el que, al navegar a un directorio que no tenía el directorio .git, el formato volvía al aviso de PS.