Saltar al contenido

¿Cómo puedo mostrar mi nombre de rama git actual en mi indicador de PowerShell?

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:

ingrese la descripción de la imagen aquí

Ejemplo 2:

ingrese la descripción de la imagen aquí

@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.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *