web-dev-qa-db-ja.com

ターミナルで現在のブランチとフォルダーのパスを表示するにはどうすればよいですか?

Team Treehouseのビデオをいくつか見てきましたが、Gitで作業しているときに非常に見栄えの良い端末があります。

たとえば、彼らは(似たようなもの)を持っています:

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

必要なデータのビットを区別するための色を使用して、どのブランチに自分のブランチの有用な情報を表示できますか?まだ見つけていないデファクトプラグインがありますか?

Mac OSX 10.8を使用しています

59
sergserg

プラグインに関するものではありません。シェルでのプロンプトトリックについてです。

Bashでのクールなセットアップについては、この男のdotfilesプロジェクトをご覧ください。

https://github.com/mathiasbynens/dotfiles

派手なプロンプトを取得するには、.bash_Promptまたは~/.bash_profile~/.bashrcを含めます。

質問とまったく同じプロンプトを表示するには、export PS1の最後にある.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\]"

約1か月前にこのリポジトリのすべての.bash*ファイルを使用することになりましたが、これは本当に役に立ちました。

Gitの場合、.gitconfigに追加の特典があります。

そして、あなたはMacユーザーなので、.osxにはさらに多くの利点があります。

61
janos

簡単な方法

お気に入りのエディターで~/.bash_profileを開き、次のコンテンツを下部に追加します。

プロンプトのGitブランチ。

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ブランチ名を端末プロンプト(MAC)に追加

51
6LYTH3

既存の優れた答えを拡張するために、見栄えの良い端末を取得する非常に簡単な方法は、オープンソースDotfilesプロジェクトを使用することです。

https://github.com/mathiasbynens/dotfiles


enter image description here


OSXおよびLinuxでのインストールは非常に簡単です。ターミナルで次のコマンドを実行します。

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

これは:

  1. Gitはレポジトリをクローンします。
  2. cdフォルダーに。
  3. インストールbashスクリプトを実行します。
28
sergserg

私のプロンプトが含​​まれています:

  • 最後のコマンドの終了ステータス(0でない場合)
  • ルート時の顕著な変化
  • rsync- style user@Host:pathnameコピーアンドペーストの良さ
  • Gitブランチ、インデックス、変更済み、未追跡、およびアップストリーム情報
  • きれいな色

例: Screenshot of my Prompt in action これを行うには、以下を~/.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
11
Tom Hale

このリンク の説明に従って、oh-my-zshプラグインをインストールするだけです。

enter image description here

MacOSおよびLinuxで最適に動作します。

基本インストール

Oh My Zshは、ターミナルで次のコマンドのいずれかを実行することによりインストールされます。これは、コマンドラインからcurlまたは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
amy2719

システムにインストールされているgitパッケージには、有益なプロンプトの作成を支援するbashファイルが含まれています。色を作成するには、プロンプトに端末エスケープシーケンスを挿入する必要があります。そして最後の要素は、組み込み変数Prompt_COMMANDを使用して、各コマンドが実行された後にプロンプ​​トを更新することです。

〜/ .bashrcを編集して次の項目を含めると、質問にプロンプ​​トが表示され、いくつかの色の差がモジュロされます。

#
# 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
2
Chadversary

多くのPS1ジェネレーターがありますが、 ezprompt にはgit status(2番目のタブ 'Status Elements')もあります。

1
Anver Sadhat

6LYTH3の回答に基づいて、いくつかの改善が役立つ可能性があるため、自分で投稿することにしました。

簡単な解決策

~/.bash_profileを開き、次のコンテンツを追加します

# \[\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"

これは:

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.

これで色をカスタマイズできます list

洗練されたソリューション

別のオプションは、Git Bash Promptを使用して、 this でインストールすることです。 Mac OS XでHomebrew経由でオプションを使用しました。

git_Prompt_list_themesテーマを表示しますが、私はそれらのどれも好きではありませんでした。

git_Prompt_color_samplesを使用して、使用可能な色を確認します。

git_Prompt_make_custom_theme [<Name of base theme>]で新しいカスタムテーマを作成します。これにより、.git-Prompt-colors.shファイルが作成されます。

subl ~/.git-Prompt-colors.shでgit-Prompt-colors.shを開き、カスタマイズします:

.git-Prompt-colors.shファイルは、カスタマイズすると次のようになります。

    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"

これがお役に立てば幸いです!

0
Jose Paez