Wie kann ich den aktuellen Zweig- und Ordnerpfad im Terminal anzeigen?


73

Ich habe einige der Team Treehouse-Videos gesehen und sie haben ein sehr gut aussehendes Terminal, wenn ich mit Git arbeite.

Zum Beispiel haben sie (etwas ähnliches):

mike@treehouseMac: [/Work/test - feature-branch-name] $ git add .
mike@treehouseMac: [/Work/test - feature-branch-name] $ git commit -m "Some feature."
mike@treehouseMac: [/Work/test - feature-branch-name] $ git checkout master
mike@treehouseMac: [/Work/test - master] $ git status

Wie kann mein Terminal mir einige nützliche Informationen darüber anzeigen, in welchem ​​Zweig ich mich befinde, mit Farben, um Teile der gewünschten Daten zu unterscheiden? Gibt es eine Art De-facto-Plugin, das ich noch nicht gefunden habe?

Ich verwende Mac OSX 10.8

Antworten:


70

Es geht nicht um ein Plugin. Es geht um schnelle Tricks in der Shell.

Schauen Sie sich für ein cooles Setup in Bash das dotfilesProjekt dieses Typen an:

https://github.com/mathiasbynens/dotfiles

Um eine ausgefallene Eingabeaufforderung zu erhalten, fügen Sie die .bash_promptin Ihr ~/.bash_profileoder ein ~/.bashrc.

Um genau die gleiche Eingabeaufforderung wie in Ihrer Frage zu erhalten, ändern Sie die export PS1Zeile am Ende folgendermaßen .bash_prompt:

export PS1="\[${BOLD}${MAGENTA}\]\u\[$WHITE\]@\[$ORANGE\]\h\[$WHITE\]: [\[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" - \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]] \$ \[$RESET\]"

Ich habe vor .bash*ungefähr einem Monat alle Dateien aus diesem Repository verwendet, und es war wirklich nützlich für mich.

Für Git gibt es zusätzliche Extras .gitconfig.

Und da Sie ein Mac-Benutzer sind, gibt es noch mehr Extras .osx.


3
Danach bash: parse_git_branch: command not found
bekomme

@ SharikovVladislav Gibt es ein Update dazu? Wie lösen wir das parse_git_branch: command not found?
user2719875

1
Um den parse_git_branchFehler zu beheben , müssen Sie eine Funktion definieren als:parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/' }
bc1105

parse_git_branchwurde vermutlich von hier kopiert: gist.github.com/joseluisq/1e96c54fa4e1e5647940
Tom Lord

72

Einfacher Weg

Öffnen Sie ~/.bash_profilein Ihrem bevorzugten Editor und fügen Sie den folgenden Inhalt unten hinzu.

Git-Zweig in Eingabeaufforderung.

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ "

Git Branch zur Terminal-Eingabeaufforderung hinzufügen (Mac)


3
Ich mochte dies mit einem \ n vor dem $ -Zeichen am Ende, um meine Eingabeaufforderung in die nächste Zeile zu setzen.
Gandalf458

1
Es dauerte 5 Minuten, um vollständig anzupassen! Hier sind die Farben: misc.flogisoft.com/bash/tip_colors_and_formatting
rndrfero

40

Für alle, die nach einer Möglichkeit suchen, dies in macOS Catalina oder höher (10.15+ inkl. Big Sur 11.0) zu tun, die bash zugunsten von zsh veraltet hat, ist hier meine .zshrc-Datei:

parse_git_branch() {
    git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}
COLOR_DEF=$'\e[0m'
COLOR_USR=$'\e[38;5;243m'
COLOR_DIR=$'\e[38;5;197m'
COLOR_GIT=$'\e[38;5;39m'
NEWLINE=$'\n'
setopt PROMPT_SUBST
export PROMPT='${COLOR_USR}%n@%M ${COLOR_DIR}%d ${COLOR_GIT}$(parse_git_branch)${COLOR_DEF}${NEWLINE}%% '

Wenn Ihnen die von mir verwendeten Farben nicht gefallen, ersetzen Sie die Werte 243/197/39 durch die hier definierten Farbcodes: https://misc.flogisoft.com/bash/tip_colors_and_formatting


1
Funktioniert einwandfrei, ich weiß es zu schätzen.
Sam Orozco

Das funktioniert super - danke, dass du das geschrieben hast. Schade, dass zsh nicht wie andere Bashes funktionieren kann!
Giran

Wo finde ich die .zshrc-Datei? Ich bin in meinem Home-Verzeichnis oder / Users / myusername, aber wenn ich ls -lah ausführe, kann ich es nicht in der Liste sehen - es gibt auch kein .bashrc oder .bash_profile. Die einzigen verwandten Dateien, die ich sehen kann, sind .bash_history und .zsh_history
ltdev

3
@ltdev Die Datei ist nicht unbedingt standardmäßig vorhanden, da es sich um eine optionale Datei handelt. Wenn es noch nicht vorhanden ist, müssen Sie die Datei mit dem Befehl touch .zshrc(in Ihrem Home-Verzeichnis)
erstellen

Ich bin in Big Sur und zum ersten Mal erscheint Farbe und alles funktioniert, AUSSER der Git-Zweig wird immer noch nicht angezeigt. :( Zumindest hat mich das weiter gebracht als zuvor! Yay Farben!
cbloss793 vor

28

Eine sehr einfache Möglichkeit, ein gut aussehendes Terminal zu erhalten, ist die Verwendung des Open-Source- Dotfiles- Projekts, um die vorhandenen großartigen Antworten zu erweitern .

https://github.com/mathiasbynens/dotfiles


Geben Sie hier die Bildbeschreibung ein


Die Installation ist unter OSX und Linux kinderleicht. Führen Sie den folgenden Befehl in Terminal aus.

git clone https://github.com/mathiasbynens/dotfiles.git && cd dotfiles && source bootstrap.sh

Das wird:

  1. Git klonen das Repo.
  2. cd in den Ordner.
  3. Führen Sie das Installations-Bash-Skript aus.

7
Irgendwelche Ideen, wie man das umkehrt?
ChickenWing24

3
Es sollte beachtet werden, dass dieser
Einzeiler

2
ALERT: Verwenden Sie meine Einstellungen nicht blind, es sei denn, Sie wissen, was dies bedeutet. Benutzung auf eigene Gefahr!
Jahanzaib Aslam

4
Dies fügt Tonnen von Konfigurationen hinzu, ohne sich um die Sicherung der von ihm geschriebenen Dateien zu kümmern.
user180940

2
Dies ist ein extremer Schritt, der alle Ihre Einstellungen in Mitleidenschaft ziehen wird.
Michaeljsalo

16

Meine Eingabeaufforderung enthält:

  • Status des letzten Befehls beenden (wenn nicht 0)
  • Markante Veränderungen bei der Wurzel
  • rsync-Stil user@host:pathnamefür Copy-Paste-Güte
  • Git-Zweig, Index, modifizierte, nicht verfolgte und vorgelagerte Informationen
  • Hübsche Farben

Beispiel: Screenshot meiner Eingabeaufforderung in Aktion Fügen Sie dazu Folgendes hinzu ~/.bashrc:

#
# Set the prompt #
#

# Select git info displayed, see /usr/share/git/completion/git-prompt.sh for more
export GIT_PS1_SHOWDIRTYSTATE=1           # '*'=unstaged, '+'=staged
export GIT_PS1_SHOWSTASHSTATE=1           # '$'=stashed
export GIT_PS1_SHOWUNTRACKEDFILES=1       # '%'=untracked
export GIT_PS1_SHOWUPSTREAM="verbose"     # 'u='=no difference, 'u+1'=ahead by 1 commit
export GIT_PS1_STATESEPARATOR=''          # No space between branch and index status
export GIT_PS1_DESCRIBE_STYLE="describe"  # detached HEAD style:
#  contains      relative to newer annotated tag (v1.6.3.2~35)
#  branch        relative to newer tag or branch (master~4)
#  describe      relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
#  default       exactly eatching tag

# Check if we support colours
__colour_enabled() {
    local -i colors=$(tput colors 2>/dev/null)
    [[ $? -eq 0 ]] && [[ $colors -gt 2 ]]
}
unset __colourise_prompt && __colour_enabled && __colourise_prompt=1

__set_bash_prompt()
{
    local exit="$?" # Save the exit status of the last command

    # PS1 is made from $PreGitPS1 + <git-status> + $PostGitPS1
    local PreGitPS1="${debian_chroot:+($debian_chroot)}"
    local PostGitPS1=""

    if [[ $__colourise_prompt ]]; then
        export GIT_PS1_SHOWCOLORHINTS=1

        # Wrap the colour codes between \[ and \], so that
        # bash counts the correct number of characters for line wrapping:
        local Red='\[\e[0;31m\]'; local BRed='\[\e[1;31m\]'
        local Gre='\[\e[0;32m\]'; local BGre='\[\e[1;32m\]'
        local Yel='\[\e[0;33m\]'; local BYel='\[\e[1;33m\]'
        local Blu='\[\e[0;34m\]'; local BBlu='\[\e[1;34m\]'
        local Mag='\[\e[0;35m\]'; local BMag='\[\e[1;35m\]'
        local Cya='\[\e[0;36m\]'; local BCya='\[\e[1;36m\]'
        local Whi='\[\e[0;37m\]'; local BWhi='\[\e[1;37m\]'
        local None='\[\e[0m\]' # Return to default colour

        # No username and bright colour if root
        if [[ ${EUID} == 0 ]]; then
            PreGitPS1+="$BRed\h "
        else
            PreGitPS1+="$Red\u@\h$None:"
        fi

        PreGitPS1+="$Blu\w$None"
    else # No colour
        # Sets prompt like: ravi@boxy:~/prj/sample_app
        unset GIT_PS1_SHOWCOLORHINTS
        PreGitPS1="${debian_chroot:+($debian_chroot)}\u@\h:\w"
    fi

    # Now build the part after git's status

    # Highlight non-standard exit codes
    if [[ $exit != 0 ]]; then
        PostGitPS1="$Red[$exit]"
    fi

    # Change colour of prompt if root
    if [[ ${EUID} == 0 ]]; then
        PostGitPS1+="$BRed"'\$ '"$None"
    else
        PostGitPS1+="$Mag"'\$ '"$None"
    fi

    # Set PS1 from $PreGitPS1 + <git-status> + $PostGitPS1
    __git_ps1 "$PreGitPS1" "$PostGitPS1" '(%s)'

    # echo '$PS1='"$PS1" # debug    
    # defaut Linux Mint 17.2 user prompt:
    # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\] $(__git_ps1 "(%s)") \$ '
}

# This tells bash to reinterpret PS1 after every command, which we
# need because __git_ps1 will return different text and colors
PROMPT_COMMAND=__set_bash_prompt

2
Dies ist ein erstaunlich sauberer Code für eine Eingabeaufforderung mit vielen Informationen. Ich habe viele Stunden damit verbracht, an meiner Aufforderung zu arbeiten und aus Fallstricken herauszuklettern, um im Grunde zu dem zu gelangen, was Sie hier haben. Ich empfehle dringend, mit diesem Code zu beginnen, wenn Sie an der Eingabeaufforderung an einem benutzerdefinierten, farbigen Git-Status arbeiten.
wisbucky

1
Props to you Tom, dies ist bei weitem die sauberste und am einfachsten zu ändernde Lösung, auf die ich gestoßen bin. @wisbucky war absolut richtig
jofrev

11

Installieren Sie einfach die oh-my-zshPlugins wie in diesem Link beschrieben .

Geben Sie hier die Bildbeschreibung ein

Es funktioniert am besten unter MacOS und Linux.

Grundinstallation

Oh My Zsh wird installiert, indem Sie einen der folgenden Befehle in Ihrem Terminal ausführen. Sie können dies über die Befehlszeile mit entweder curloder installieren wget.

via curl

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

via wget

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

3

Das auf Ihrem System installierte Git-Paket enthält Bash-Dateien, die Sie beim Erstellen einer informativen Eingabeaufforderung unterstützen. Um Farben zu erstellen, müssen Sie Terminal-Escape-Sequenzen in Ihre Eingabeaufforderung einfügen. Die letzte Zutat besteht darin, Ihre Eingabeaufforderung zu aktualisieren, nachdem jeder Befehl mithilfe der integrierten Variablen PROMPT_COMMAND ausgeführt wurde.

Bearbeiten Sie Ihre ~ / .bashrc so, dass sie Folgendes enthält, und Sie sollten die Eingabeaufforderung in Ihrer Frage erhalten, einige Farbunterschiede zu modulieren.

#
# Git provides a bash file to create an informative prompt. This is its standard
# location on Linux. On Mac, you should be able to find it under your Git
# installation. If you are unable to find the file, I have a copy of it on my GitHub.
#
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-git-prompt.sh
#
source /usr/share/git/completion/git-prompt.sh

#
# Next, we need to define some terminal escape sequences for colors. For a fuller
# list of colors, and an example how to use them, see my bash color file on my GitHub
# and my coniguration for colored man pages.
#
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/10-colors.sh
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-less.sh
#
color_start='\e['
color_end='m'
color_reset='\e[0m'
color_bg_blue='44'

#
# To get a fancy git prompt, it's not sufficient to set PS1. Instead, we set PROMPT_COMMAND,
# a built in Bash variable that gets evaluated before each render of the prompt.
#
export PROMPT_COMMAND="PS1=\"\${color_start}\${color_bg_blue}\${color_end}\u@\h [\w\$(__git_ps1 \" - %s\")]\${color_reset}\n\$ \""

#
# If you find that the working directory that appears in the prompt is ofter too long,
# then trim it.
#
export PROMPT_DIRTRIM=3


1

Aufgrund der Antwort von 6LYTH3 habe ich mich aufgrund einiger Verbesserungen, die nützlich sein könnten, entschlossen, meine eigenen zu veröffentlichen:

Einfache Lösung

Öffnen ~/.bash_profileSie den folgenden Inhalt und fügen Sie ihn hinzu

# \[\e[0m\] resets the color to default color
reset_color='\[\e[0m\]'
#  \[\033[33m\] sets the color to yellow
path_color='\[\033[33m\]'
# \e[0;32m\ sets the color to green
git_clean_color='\[\e[0;32m\]'
# \e[0;31m\ sets the color to red
git_dirty_color='\[\e[0;31m\]'

# determines if the git branch you are on is clean or dirty
git_prompt ()
{
  # Is this a git directory?
  if ! git rev-parse --git-dir > /dev/null 2>&1; then
    return 0
  fi
  # Grab working branch name
  git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
  # Clean or dirty branch
  if git diff --quiet 2>/dev/null >&2; then
    git_color="${git_clean_color}"
  else
    git_color="${git_dirty_color}"
  fi
  echo " [$git_color$git_branch${reset_color}]"
}

export PS1="${path_color}\w\[\e[0m\]$(git_prompt)\n"

Das sollte:

1) Prompt the path you're in, in color: path_color.
2) Tell you which branch are you.
3) Color the name of the branch based on the status of the branch with git_clean_color 
for a clean work directory and git_dirty_color for a dirty one.
4) The brackets should stay in the default color you established in your computer.
5) Puts the prompt in the next line for readability.

Mit dieser Liste können Sie die Farben anpassen

Anspruchsvolle Lösung

Eine andere Möglichkeit ist die Verwendung von Git Bash Prompt. Installieren Sie damit . Ich habe die Option über Homebrew unter Mac OS X verwendet.

git_prompt_list_themes um die Themen zu sehen, aber ich mochte keines von ihnen.

git_prompt_color_samples um verfügbare Farben zu sehen.

git_prompt_make_custom_theme [<Name of base theme>] Um ein neues benutzerdefiniertes Design zu erstellen, sollte eine .git-prompt-colours.sh-Datei erstellt werden.

subl ~/.git-prompt-colors.sh um git-prompt-colors.sh zu öffnen und anzupassen:

Die Datei .git-prompt-colours.sh sollte bei meiner Anpassung so aussehen

    override_git_prompt_colors() {
      GIT_PROMPT_THEME_NAME="Custom"

      # Clean or dirty branch
      if git diff --quiet 2>/dev/null >&2; then
        GIT_PROMPT_BRANCH="${Green}"
      else
        GIT_PROMPT_BRANCH="${Red}"
      fi
    }

    reload_git_prompt_colors "Custom"

Hoffe das hilft, einen schönen Tag noch!


danke für das script, das funktioniert gut in meinem ubuntu 19.10.
PallavSharma

Freut mich zu helfen! Ich benutze einen Mac-Sohn, was bedeutet, dass er sowohl für Mac als auch für Ubuntus funktioniert
Jose Paez

1

Ich denke, 2019 git branch --show-currentist ein besserer Befehl als die akzeptierte Antwort.

$ git branch --show-current
master

(Hinzugefügt in Git 2.22 Release im Juni 2019)

Es läuft viel schneller, da es nicht alle Zweige durchlaufen muss. Ähnliches git branchsollte auch in der Eingabeaufforderung vermieden werden, da dies Ihre Eingabeaufforderung verlangsamt, wenn Sie viele lokale Zweige haben.

Fügen Sie es in eine Funktion ein, die an einer beliebigen Stelle an der Eingabeaufforderung verwendet werden kann:

  # This function returns '' in all below cases:
  #   - git not installed or command not found
  #   - not in a git repo
  #   - in a git repo but not on a branch (HEAD detached)
  get_git_current_branch() {
    git branch --show-current 2> /dev/null
  }

Mehr Kontext:

$ git version
git version 2.23.0

Ausgezeichnete Antwort im Jahr 2019. Die akzeptierten und am meisten bewerteten Antworten zeigen ihr Alter.
Akin Okegbile

0

Unter Mac OS Catalina wird .bash_profile durch .zprofile ersetzt

Schritt 1: Erstellen Sie ein .z-Profil

touch .zprofile

Schritt 2:

nano .zprofile

Geben Sie hier die folgende Zeile ein

source ~/.bash_profile

und speichern (Strg + o Strg + x zurückgeben)

Schritt 3: Starten Sie Ihr Terminal neu

So fügen Sie einen Git- Zweignamen hinzu Jetzt können Sie die folgenden Zeilen in .bash_profile hinzufügen

    parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ "

Starten Sie Ihr Terminal neu, dies wird funktionieren.

Hinweis: Auch Sie können .bash_profile in .zprofile umbenennen, was ebenfalls funktioniert.


Die nächste Meldung erscheint danach und funktioniert nicht ->zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?
jose920405

Wo finde ich die .zprofile-Datei? Ich bin in meinem Home-Verzeichnis oder / Users / myusername, aber wenn ich ls -lah ausführe, kann ich es nicht in der Liste sehen - es gibt auch kein .bashrc oder .bash_profile oder .zshrc. Die einzigen verwandten Dateien, die ich sehen kann, sind .bash_history und .zsh_history
ltdev

0

Halte es schnell, halte es einfach

Fügen Sie dies in Ihre ~/.bashrcDatei ein.

git_stuff() {
  git_branch=$(git branch --show-current 2> /dev/null)
  if [[ $git_branch == "" ]];then
    echo -e ""
  elif [[ $git_branch == *"Nocommit"* ]];then
    echo -e "No commits"
  else
    echo -e "$git_branch"
  fi
}
prompt() {
  PS1="\e[2m$(date +%H:%M:%S.%3N) \e[4m$(git_stuff)\033[0m\n\w$ "
}
PROMPT_COMMAND=prompt

Dann source ~/.bashrc

Geben Sie hier die Bildbeschreibung ein


0

Für Mac Catilina 10.15.5 und eine neuere Version:

Fügen Sie Ihre ~ / .zshrc-Datei hinzu

function parse_git_branch() {
    git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}

setopt PROMPT_SUBST
export PROMPT='%F{grey}%n%f %F{cyan}%~%f %F{green}$(parse_git_branch)%f %F{normal}$%f '
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.