Câu hỏi Làm cách nào để hiển thị nhánh git với các màu trong dấu nhắc Bash?


tôi đang dùng hướng dẫn này để hiển thị tên chi nhánh trong thiết bị đầu cuối gnome (Ubuntu 15.10) khi làm việc trong kho lưu trữ git. Dựa trên những điều trên tôi có dưới đây trong tập tin ~ / .bashrc của tôi:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes 

...

# Add git branch if its present to PS1
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

Kết quả là tôi nhận được:

enter image description here

do đó, nó công trinh. Nhưng tại sao màu của người dùng @ host của tôi bị xóa? Và tôi cũng hy vọng rằng tên chi nhánh sẽ được tô màu. Trước khi nó trông như thế này:

enter image description here

CẬP NHẬT: Bây giờ tôi đã thử hướng dẫn này thay thế:

https://coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

thêm cái này vào .bashrc:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

và nó hoạt động:

enter image description here

Chú ý trong .bashrc Tôi cũng có cái này (mặc định):

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

Tôi vẫn chưa tìm ra lý do tại sao đoạn mã đó đưa ra kết quả chính xác và phiên bản khác thì không. Bất kỳ đầu vào về điều này?

Đây là phiên bản .bashrc của tôi có đoạn mã cũ được bật không hoạt động:

http://pastebin.com/M8kjEiH3


54
2018-02-07 08:07


gốc


Đã force_color_prompt chưa từng có trước đây? - muru
Có, tôi đã thử với cả kết quả không được trả lời và nhận xét giống nhau. Hướng dẫn được đăng ở trên cho biết cần được nhận xét. - u123
Bạn có thể đăng bài hoàn thành của mình không .bashrc? IIRC mặc định .bashrc không bật lời nhắc màu, vì vậy bạn phải thay đổi màu để hiển thị màu. Nó phụ thuộc vào những gì bạn thay đổi. - muru
Có một cái nhìn tại dòng 64, mà sẽ cho bạn biết lý do tại sao uncommenting force_color_prompt không giúp được gì. - muru
@ u123 đừng lo lắng về mặc định .bashrc quá nhiều. Nếu bạn lộn xộn, bạn luôn có thể lấy bản gốc từ /etc/skel/.bashrc. - muru


Các câu trả lời:


Đoạn mã này:

# Add git branch if its present to PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

Có nghĩa là thay thế định nghĩa nhắc mặc định:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Mà kết thúc bằng:

unset color_prompt force_color_prompt

Các .bashrc Bạn đã đăng cho thấy bạn đang thêm nó sau định nghĩa nhắc mặc định và unset color_prompt force_color_prompt (dòng # 64).

Hoặc thay thế định nghĩa nhắc mặc định với đoạn trích hoặc để lại ~/.bashrc như nó là và bình luận định nghĩa nhắc mặc định cùng với unset color_prompt force_color_prompt trên dòng # 64:


Vì vậy, một phần của .bashrc của bạn có thể trông giống như

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
# THE SIX LINES BELOW are the default prompt and the unset (which were in the original .bashrc)
#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi
#unset color_prompt force_color_prompt

screensot


77
2018-02-07 08:30



Đã xác minh ở trên và bạn đã chính xác. Tôi sẽ gắn bó với phiên bản đoạn mã mới vì nó hoạt động mà không phải sửa đổi các phần mặc định của tệp bashrc. - u123
nó không thêm màu vào tên chi nhánh. - Avinash Raj
@AvinashRaj Kiểm tra nó với một bản sao của mặc định ~/.bashrc trong /etc/skel/.bashrc, bạn có thể có thứ gì đó can thiệp vào ~/.bashrc. - kos
un-comment force_color_prompt = yes (dòng # 48) nếu màu không hiển thị. - Adil Abbasi
Nhanh hơn: git symbolic-ref --short HEAD 2> /dev/null - Elazar


Ubuntu: Show your branch name on your terminal

Thêm các dòng này vào tệp ~ / .bashrc của bạn

# Show git branch name
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

8
2017-08-16 09:23





Bây giờ, tôi đã theo dõi điều này https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f và làm việc, thích nó cho đến nay, mặc dù tôi đang có kế hoạch để tùy chỉnh nó hơn nữa.

Trong Terminal

mkdir ~/.bash

Sao chép nguyên git-prompt.sh tập tin từ git contrib vào ~/.bash   danh mục:    https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Phía trong ~/.bashrc hoặc là ~/.bash_profile (chọn tệp nơi bạn   thường đặt bất kỳ tùy chỉnh / thiết lập bash nào), thêm các dòng:

source ~/.bash/git-prompt.sh # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for git-prompt.sh to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see git-prompt.sh for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on git-prompt.sh)

Miễn là bạn đang ở trong một repo git, dấu nhắc Bash của bạn bây giờ sẽ hiển thị   nhánh git hiện tại có màu sắc có nghĩa là nó không bị cam kết   thay đổi.


5
2018-03-07 23:11





Vấn đề của tôi là tôi đã không kích hoạt tùy chọn

Chạy lệnh dưới dạng shell đăng nhập trong

Thiết bị đầu cuối → Chỉnh sửa → Tùy chọn tiểu sử → Chỉ huy


0
2017-09-26 11:15





thay thế

parse_git_branch

với

parse_git_branch 2>/dev/null

trong định nghĩa PS1 của bạn và sống hạnh phúc mãi mãi về sau.


0
2018-05-18 10:19