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


109

Tôi đang sử 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 git. Dựa trên những điều trên, bây giờ tôi có phần bên dưới trong tệp ~ / .bashrc của mì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 

...

# 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à bây giờ tôi nhận được:

nhập mô tả hình ảnh ở đây

vì vậy nó hoạt động . 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 mong rằng tên chi nhánh nên được tô màu. Trước khi nó trông như thế này:

nhập mô tả hình ảnh ở đây

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 phần 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:

nhập mô tả hình ảnh ở đây

Lưu ý 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 thấy lý do tại sao đoạn trích đó cho kết quả chính xác và phiên bản khác thì không. Bất kỳ đầu vào trên này?

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

http://pastebin.com/M8kjEiH3


Đã bị force_color_promptbỏ sót trước?
muru

Có, tôi đã cố gắng với cả hai kết quả không bình luận và nhận xét. Hướng dẫn được đăng ở trên nói rằng nó nên được bình luận.
u123

Bạn có thể gửi bài của bạn hoàn thành .bashrc? IIRC mặc định .bashrckhông kích hoạt lời nhắc màu, vì vậy bạn phải thay đổi nó để hiển thị màu. Nó phụ thuộc vào những gì bạn đã thay đổi.
muru

1
Hãy xem dòng 64, phần này sẽ cho bạn biết lý do tại sao việc force_color_promptkhông chú ý không giúp được gì.
muru

2
@ U123 đừng lo lắng về mặc định .bashrcquá nhiều. Nếu bạn gây rối, bạn luôn có thể lấy bản gốc từ /etc/skel/.bashrc.
muru

Câu trả lời:


122

Đoạn trích 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 nhở 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

Kết thúc bằng:

unset color_prompt force_color_prompt

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

Thay thế định nghĩa lời nhắc mặc định bằng đoạn mã hoặc để nguyên ~/.bashrcnhư vậy và nhận xét định nghĩa lời nhắc mặc định cùng với unset color_prompt force_color_promptdòng # 64:


Vì vậy, một phần .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

màn hình


Xác nhận những điều trên và bạn đã đúng. Tôi sẽ gắn bó với phiên bản mới của đoạn trích 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

1
nó không thể 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 ~/.bashrctrong /etc/skel/.bashrc, bạn có thể có một cái gì đó can thiệp vào bạn ~/.bashrc.
kos

un-comment force_color_prompt = yes (dòng # 48) nếu màu sắc không hiển thị.
Adil Abbasi

1
Để tô màu nhánh của bạn theo trạng thái của nó, bạn có thể sử dụng tập lệnh git-prompt gốc do chính git cung cấp.
Niket Pathak

60

Ubuntu: Hiển thị tên chi nhánh của bạn trên thiết bị đầu cuối của bạn

Thêm các dòng này trong 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

Tải lại tệp .bashrc bằng lệnh này:

$ source ~/.bashrc

5
Điều này làm việc cho tôi vào ngày 18.04!
cbloss793

1
Cảm ơn. Sử dụng: Ubuntu 18.04.1 LTS
Bishwas Mishra

Nó cũng hoạt động với tôi trên sơ đồOS 0.4 Loki. Đơn giản như mở my ~ / .bashrc bằng lệnh sudo nano ~/.bashrc, sao chép mã của bạn ở cuối tệp, lưu nó, thoát và tải lại ~ / .bashrc với mã bạn đã dán ở trên. Cảm ơn rất nhiều;)
Juan Gómez Carrillo

Hoạt động trên Redhat 6.8!
BeeGee

1
Điều này làm việc và giữ màu sắc! (Ubuntu 18.04)
warkentien2

10

Hiện tại, tôi đã theo dõi https://gist.github.com/eliotsykes/48516b877f5a4f7cd52f này 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 thêm.

Trong thiết bị đầu cuối

mkdir ~/.bash

Sao chép git-prompt.shtệp thô từ git contrib vào ~/.bash thư mục: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Bên trong ~/.bashrchoặc ~/.bash_profile(chọn tệp mà 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 bằng màu sắc nếu nó có những thay đổi không được cam kết.


dễ dàng và làm việc
Dani

Đây phải là câu trả lời được chấp nhận, vì nó rõ ràng, súc tích và thực hiện công việc, và nó cũng hoạt động trên các nền tảng khác.
Miguelmorin

2

Về thư mục nhà

nhấp vào Ctrl+ hđể hiển thị các tập tin ẩn.

Mở . bashrctập tin và ở cuối dán tiếp theo:

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\] $ "

Trong trường hợp bạn có thiết bị đầu cuối của bạn mở, đóng và mở lại. Thưởng thức!!


Xin chào, tôi đã thử nó và nó chỉ hoạt động khi tôi chuyển đổi superuser, bạn có thể cho tôi biết cách bật luôn không?
Denis Stephanov

0

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

Chạy lệnh như một vỏ đăng nhập trong

TerminalChỉnh sửaTùy chọn hồ sơLệnh


0

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

Nối các dòng dưới đây vào ~/.bashrc:

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.