Bagaimana cara menunjukkan cabang git dengan warna di Bash prompt?

109

Saya menggunakan panduan ini untuk menunjukkan nama cabang di terminal gnome (Ubuntu 15.10) ketika bekerja di repositori git. Berdasarkan hal di atas saya sekarang memiliki yang di bawah ini di file ~ / .bashrc saya:

# 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

Akibatnya saya sekarang mendapatkan:

masukkan deskripsi gambar di sini

jadi itu berhasil . Tetapi mengapa pewarnaan user @ host saya telah dihapus? Dan saya juga berharap bahwa nama cabang harus diwarnai. Sebelum terlihat seperti ini:

masukkan deskripsi gambar di sini

UPDATE: Saya sekarang sudah mencoba panduan ini:

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

menambahkan ini ke .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\] $ "

dan itu bekerja:

masukkan deskripsi gambar di sini

Perhatikan di .bashrc Saya juga punya ini (default):

# 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

Saya belum menemukan alasan mengapa cuplikan itu memberikan hasil yang benar dan versi lainnya tidak. Ada masukan tentang ini?

Ini adalah versi .bashrc saya yang mengaktifkan cuplikan lama yang tidak berfungsi:

http://pastebin.com/M8kjEiH3

u123
sumber
Apakah force_color_promptsebelumnya tidak diberi komentar?
muru
Ya saya telah mencoba dengan hasil yang sama tanpa komentar dan berkomentar sama Panduan yang diposting di atas mengatakan itu harus dikomentari.
u123
Bisakah Anda memposting lengkap .bashrc? IIRC default .bashrctidak mengaktifkan prompt warna, jadi Anda harus mengubahnya untuk menampilkan warna. Itu tergantung pada apa yang Anda ubah.
muru
1
Lihat baris 64, yang seharusnya memberi tahu Anda mengapa force_color_prompttidak memberi komentar tidak membantu.
muru
2
@ u123 jangan terlalu khawatir tentang default .bashrc. Jika Anda berantakan, Anda selalu bisa mendapatkan aslinya /etc/skel/.bashrc.
muru

Jawaban:

122

Cuplikan ini:

# 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

Dimaksudkan untuk menggantikan definisi prompt default:

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

Yang berakhir dengan:

unset color_prompt force_color_prompt

The .bashrcAnda diposting menunjukkan Anda menambahkannya setelah definisi standar yang cepat dan unset color_prompt force_color_prompt(baris # 64).

Entah menggantikan definisi standar prompt dengan potongan atau meninggalkan Anda ~/.bashrcseperti itu dan komentar definisi prompt default bersama dengan unset color_prompt force_color_prompton line # 64:


Jadi bagian dari .bashrc Anda dapat terlihat seperti

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

kos
sumber
Diverifikasi di atas dan Anda benar. Saya akan tetap menggunakan snippet versi baru karena berfungsi tanpa harus memodifikasi bagian default dari file bashrc.
u123
1
gagal menambahkan warna ke nama cabang.
Avinash Raj
@AvinashRaj Uji dengan salinan default ~/.bashrcdi /etc/skel/.bashrc, Anda mungkin memiliki sesuatu yang mengganggu Anda ~/.bashrc.
kos
un-comment force_color_prompt = ya (baris # 48) jika warnanya tidak terlihat.
Adil Abbasi
1
Untuk mewarnai cabang Anda berdasarkan statusnya, Anda dapat menggunakan skrip asli git-prompt yang disediakan oleh git itu sendiri.
Niket Pathak
61

Ubuntu: Tampilkan nama cabang Anda di terminal Anda

Tambahkan baris ini di file ~ / .bashrc Anda

# 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

Muat ulang file .bashrc dengan perintah ini:

$ source ~/.bashrc
Sam
sumber
5
Ini bekerja untuk saya pada 18.04!
cbloss793
1
Terima kasih. Menggunakan: Ubuntu 18.04.1 LTS
Bishwas Mishra
Ini bekerja juga untuk saya di SDOS 0,4 Loki. Sesederhana buka my ~ / .bashrc dengan perintah sudo nano ~/.bashrc, salin kode Anda di akhir file, simpan, keluar dan muat kembali ~ / .bashrc dengan kode yang Anda tempelkan di atas. Terima kasih banyak;)
Juan Gómez Carrillo
Bekerja pada Redhat 6.8!
BeeGee
1
Ini berhasil dan mempertahankan warna! (Ubuntu 18.04)
warkentien2
10

Untuk saat ini, saya mengikuti https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f dan berfungsi, menyukainya sejauh ini, meskipun saya berencana untuk menyesuaikannya lebih lanjut.

Di Terminal

mkdir ~/.bash

Salin git-prompt.shfile mentah dari git contrib ke ~/.bash direktori: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Di dalam ~/.bashrcatau ~/.bash_profile(pilih file tempat Anda biasanya menempatkan kustomisasi / setup bash), tambahkan baris:

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)

Selama Anda berada di dalam git repo, Bash prompt Anda sekarang harus menunjukkan cabang git saat ini dalam warna yang menandakan jika ada perubahan yang tidak dikomit.

typelogic
sumber
mudah dan bekerja!
Dani
Ini harus menjadi jawaban yang diterima, karena jelas, ringkas, dan berfungsi, dan bekerja pada platform lain juga.
miguelmorinin
2

Buka folder beranda

klik Ctrl+ huntuk menampilkan file tersembunyi.

Buka . bashrcfile dan pada akhirnya tempel yang berikutnya:

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

Jika terminal Anda dibuka, tutup dan buka lagi. Nikmati!!

webtechnelson
sumber
Halo, saya mencobanya dan hanya berfungsi di mana saya beralih superuser, dapatkah Anda memberi tahu saya cara mengaktifkannya selalu?
Denis Stephanov
0

Masalah saya adalah saya belum mengaktifkan opsi

Jalankan perintah sebagai shell masuk

TerminalEditPreferensi ProfilPerintah

Pelawak
sumber
0

menggantikan

parse_git_branch

dengan

parse_git_branch 2>/dev/null

dalam definisi PS1 Anda dan hidup bahagia selamanya.

andrej
sumber
0

Tambahkan baris di bawah ini ke ~/.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\]\$ '
nardele salomon
sumber