ฉันจะแสดง git branch ด้วยสีใน Bash prompt ได้อย่างไร


109

ฉันใช้คำแนะนำนี้เพื่อแสดงชื่อสาขาใน gnome terminal (Ubuntu 15.10) เมื่อทำงานในที่เก็บ git จากข้างต้นตอนนี้ฉันมีด้านล่างในไฟล์ ~ / .bashrc ของฉัน:

# 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

ดังนั้นตอนนี้ฉันได้รับ:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นมันจึงใช้งานได้ แต่ทำไมสีของ user @ host ของฉันถึงถูกลบออกไป? และฉันก็คาดหวังด้วยว่าชื่อสาขาควรเป็นสี ก่อนที่มันจะเป็นแบบนี้:

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดต: ฉันได้ลองใช้คู่มือนี้แทน:

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

เพิ่มไปยัง. 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\] $ "

และใช้งานได้:

ป้อนคำอธิบายรูปภาพที่นี่

แจ้งให้ทราบล่วงหน้าใน. bashrc ฉันยังมีนี้ (เริ่มต้น):

# 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

ฉันยังไม่พบสาเหตุที่ตัวอย่างข้อมูลนั้นให้ผลลัพธ์ที่ถูกต้องและรุ่นอื่นไม่ได้ ข้อมูลใด ๆ เกี่ยวกับเรื่องนี้?

นี่คือรุ่นของ. bashrc ของฉันที่เปิดใช้ข้อมูลโค้ดเก่าซึ่งไม่ทำงาน:

http://pastebin.com/M8kjEiH3


ถูกforce_color_promptuncommented มาก่อนหรือไม่
muru

ใช่ฉันได้ลองใช้ทั้งผลลัพธ์ที่ไม่ใส่คอมเม้นท์และแสดงความคิดเห็นแบบเดียวกัน คู่มือที่โพสต์ไว้ด้านบนบอกว่าควรให้ความเห็น
u123

คุณช่วยโพสต์ข้อความได้.bashrcไหม IIRC ค่าเริ่มต้น.bashrcไม่ได้เปิดใช้งานการแจ้งเตือนสีดังนั้นคุณต้องเปลี่ยนเพื่อแสดงสี ขึ้นอยู่กับสิ่งที่คุณเปลี่ยนแปลง
muru

1
ดูบรรทัดที่ 64 ซึ่งควรบอกคุณว่าทำไมการforce_color_promptไม่แสดงความคิดเห็นจึงไม่ช่วย
muru

2
@ u123 ไม่ต้องกังวลกับค่าเริ่มต้น.bashrcมากเกินไป /etc/skel/.bashrcหากคุณเลอะคุณสามารถได้รับจากเดิม
muru

คำตอบ:


122

ตัวอย่างนี้:

# 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

หมายถึงการแทนที่นิยามการแจ้งเตือนเริ่มต้น:

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

.bashrcคุณโพสต์แสดงให้เห็นว่าคุณกำลังเพิ่มมันหลังจากนิยามพรอมต์เริ่มต้นและunset color_prompt force_color_prompt(สาย # 64)

ไม่ว่าจะเปลี่ยนนิยามพรอมต์เริ่มต้นพร้อมด้วยข้อมูลหรือปล่อยของคุณ~/.bashrcเป็นมันและแสดงความคิดเห็นนิยามพรอมต์เริ่มต้นพร้อมกับunset color_prompt force_color_promptในบรรทัด # 64:


ดังนั้นส่วนหนึ่งของ. bashrc ของคุณอาจดูเหมือน

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


ตรวจสอบข้างต้นและคุณถูกต้อง ฉันจะติดกับข้อมูลโค้ดรุ่นใหม่เนื่องจากมันทำงานได้โดยไม่ต้องแก้ไขส่วนเริ่มต้นของไฟล์ bashrc
u123

1
มันไม่สามารถเพิ่มสีให้กับชื่อสาขา
Avinash Raj

@AvinashRaj ทดสอบด้วยสำเนาเริ่มต้น~/.bashrcในคุณอาจมีบางสิ่งบางอย่างเข้าไปแทรกแซงของคุณ/etc/skel/.bashrc ~/.bashrc
kos

un-comment force_color_prompt = ใช่ (บรรทัดที่ 48) หากไม่เห็นสี
Adil Abbasi

1
หากต้องการให้สีสาขาของคุณตามสถานะคุณสามารถใช้สคริปต์ git-prompt แบบดั้งเดิมที่จัดเตรียมโดย git เอง
Niket Pathak

60

Ubuntu: แสดงชื่อสาขาของคุณในเทอร์มินัลของคุณ

เพิ่มบรรทัดเหล่านี้ในไฟล์ ~ / .bashrc ของคุณ

# 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

โหลดไฟล์. bashrc อีกครั้งด้วยคำสั่งนี้:

$ source ~/.bashrc

5
สิ่งนี้ใช้ได้กับฉันในวันที่ 18.04!
cbloss793

1
ขอบคุณ ใช้: Ubuntu 18.04.1 LTS
Bishwas Mishra

มันใช้งานได้กับฉันในระดับประถมศึกษา 0.4 Loki ด้วย ง่ายเหมือนเปิด ~ / .bashrc ด้วยคำสั่งsudo nano ~/.bashrcคัดลอกรหัสของคุณที่ส่วนท้ายของไฟล์บันทึกออกและโหลด ~ / .bashrc ด้วยรหัสที่คุณวางไว้ด้านบน ขอบคุณมาก;)
Juan Gómez Carrillo

ทำงานได้กับ Redhat 6.8!
BeeGee

1
สิ่งนี้ใช้ได้และเก็บรักษาสี! (Ubuntu 18.04)
warkentien2

10

สำหรับตอนนี้ฉันได้ติดตาม https://gist.github.com/eliotsykes/47516b877f5a4f7cd52fและใช้งานได้แล้วชอบมากจนถึงตอนนี้ แต่ฉันวางแผนที่จะปรับแต่งเพิ่มเติม

ในอาคารผู้โดยสาร

mkdir ~/.bash

คัดลอกgit-prompt.shไฟล์ดิบจาก git contrib ไปยัง~/.bash ไดเรกทอรี: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

ข้างใน~/.bashrcหรือ~/.bash_profile(เลือกไฟล์ที่คุณใส่ bash เอง / ตั้งค่าตามปกติ) เพิ่มบรรทัด:

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)

ตราบใดที่คุณยังอยู่ใน git repo ตอนนี้ Bash prompt ของคุณควรจะแสดงสาขา git ปัจจุบันในสีที่บ่งบอกว่ามีการเปลี่ยนแปลงที่ปราศจากข้อผูกมัด


ง่ายและทำงาน!
Dani

นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากมีความชัดเจนกระชับและทำงานได้และทำงานได้บนแพลตฟอร์มอื่นเช่นกัน
miguelmorin

2

ไปที่โฟลเดอร์บ้าน

คลิกCtrl+ hเพื่อแสดงไฟล์ที่ซ่อน

เปิด 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\] $ "

ในกรณีที่คุณเปิดเครื่องให้ปิดและเปิดอีกครั้ง สนุก!!


สวัสดีฉันลองแล้วมันใช้งานได้เฉพาะที่ฉันเปลี่ยน superuser คุณสามารถบอกวิธีเปิดใช้งานได้ตลอดเวลาหรือไม่
Denis Stephanov

0

ปัญหาของฉันคือฉันไม่ได้เปิดใช้งานตัวเลือก

เรียกใช้คำสั่งเป็นเปลือกเข้าสู่ระบบใน

เทอร์มินัลแก้ไข →การกำหนดค่าโปรไฟล์คำสั่ง


0

แทนที่

parse_git_branch

กับ

parse_git_branch 2>/dev/null

ในนิยาม PS1 ของคุณและใช้ชีวิตอย่างมีความสุขตลอดไป


0

ต่อท้ายบรรทัดด้านล่างเพื่อ~/.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\]\$ '
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.