จะกำหนดค่าบรรทัดคำสั่ง git bash ให้เสร็จได้อย่างไร


131

เช่นบนเครื่องอูบุนตูสดผมเคยทำงานเพียงและไม่มีการเสร็จสิ้นเมื่อพิมพ์เช่นsudo apt-get gitgit check[tab]

ฉันไม่พบอะไรเลยในhttp://git-scm.com/docsแต่วันนี้การเติม IIRC รวมอยู่ในแพ็คเกจ git และฉันต้องการรายการที่ถูกต้องใน bashrc ของฉัน


ใช้งานได้กับฉันทันทีบน Ubuntu Precise (และ Fedora 17)
หอยทากกล

2
(cd ~ && exec cat .bashrc | grep completion)เพื่อตรวจสอบว่าคุณมีมันโดยค่าเริ่มต้นหรือไม่คุณสามารถเรียกใช้
aderchox

คำตอบ:


183

บน Linux

ในการแจกแจงส่วนใหญ่จะมีการติดตั้ง git complete script ลงใน/etc/bash_completion.d/(หรือ/usr/share/bash-completion/completions/git) เมื่อคุณติดตั้ง git โดยไม่จำเป็นต้องไปที่ github คุณต้องใช้มัน - เพิ่มบรรทัดนี้ใน.bashrc:

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git

ใน Ubuntu บางเวอร์ชันการเติมข้อความอัตโนมัติของคอมไพล์อาจเสียโดยค่าเริ่มต้นการติดตั้งใหม่โดยเรียกใช้คำสั่งนี้ควรแก้ไข:

sudo apt-get install git-core bash-completion

บน Mac

คุณติดตั้งคอมไพล์เสร็จได้โดยใช้ Homebrew หรือ MacPorts

Homebrew

ถ้า$BASH_VERSION> 4: brew install bash-completion@2(เวอร์ชันที่อัปเดต) โปรดดูแลเป็นพิเศษว่าคุณมี bash เวอร์ชันใดเนื่องจากค่าเริ่มต้นของ MacOS จะมาพร้อมกับรุ่น 3.2.57 (1) - ปล่อย

เพิ่มใน.bash_profile:

  if [ -f /usr/local/share/bash-completion/bash_completion ]; then
    . /usr/local/share/bash-completion/bash_completion
  fi

สำหรับ bash เวอร์ชันเก่า: brew install bash-completion

เพิ่มใน.bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

MacPorts

sudo port install git +bash_completion

จากนั้นเพิ่มสิ่งนี้ใน.bash_profile:

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
fi

ข้อมูลเพิ่มเติมในคู่มือนี้: ติดตั้ง Bash git เสร็จสิ้น

โปรดทราบว่าในทุกกรณีคุณต้องสร้างเชลล์ใหม่ (เปิดแท็บ / หน้าต่างเทอร์มินัลใหม่) เพื่อให้การเปลี่ยนแปลงมีผล


1
กล่อง * nix ส่วนใหญ่ (โดยเฉพาะ Ubuntu) มีไฟล์นั้นอยู่แล้วดังนั้นเพียงแค่จัดหาให้กับผู้ใช้ของฉันก็แก้ปัญหาของฉันได้ ขอบคุณ
nevvermind

5
ubuntu อาจมีเป็น /etc/bash_completion.d/git-prompt
Catskul

2
ฉันมี Git แต่ไม่มี /etc/bash_completion.d
sixty4bit

15
ใน Ubuntu 14.04 ของฉันไฟล์นี้คือ/usr/share/bash-completion/completions/git. /etc/bash_completion.d/git-promptใช้สำหรับการสนับสนุน git prompt ไม่ใช่เพื่อให้เสร็จสมบูรณ์
Ray Chen

18
คำเตือน: วิธี homebrew ของ Mac จะใช้งานได้ก็ต่อเมื่อคุณติดตั้ง git ผ่าน homebrew brew uninstall bash-completionแล้วbrew install gitหากคุณเคยติดตั้ง git ด้วยวิธีอื่นมาก่อนขั้นตอนข้างต้นจะใช้ได้ผล
patapouf_ai

66

ฉันมีปัญหาเดียวกันทำตามขั้นตอนด้านล่าง:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

จากนั้นเพิ่มบรรทัดต่อไปนี้ในของคุณ.bash_profile(โดยทั่วไปจะอยู่ในโฟลเดอร์บ้านของคุณ)

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

แหล่งที่มา: http://code-worrier.com/blog/autocomplete-git/


ฉันอยู่หลังพร็อกซีดังนั้นฉันจึงต้องตั้งค่าพร็อกซีก่อนเพื่อให้ curl ทำงานexport https_proxy=proxy_ip:proxy_portฉันไม่เข้าใจว่าทำไมมันไม่ได้รับการตั้งค่าจากระบบ
madlymad

2
ไม่จำเป็นต้องซ่อนไฟล์นั้นด้วยจุดหน้าชื่อ นอกจากนี้: ระวังด้วยเวอร์ชัน git (ดูคำตอบของ wisbucky)
Walter Tross

42

คำแนะนำส่วนใหญ่ที่คุณเห็นจะบอกให้คุณดาวน์โหลด

https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

.bashrcและแหล่งที่มาว่าในสคริปต์เริ่มต้นของคุณเช่นทุบตี

แต่มีปัญหาเกิดขึ้นเนื่องจากมีการอ้างถึงmasterสาขาซึ่งเป็นเวอร์ชันล่าสุดของgit-completion.bash. ปัญหาคือบางครั้งมันจะพังเพราะมันเข้ากันไม่ได้กับ git เวอร์ชันที่คุณติดตั้งไว้

ในความเป็นจริงตอนนี้จะพังเพราะmasterสาขาgit-completion.bashมีคุณสมบัติใหม่ที่ต้องใช้ git v2.18 ซึ่งยังไม่มีตัวจัดการแพ็คเกจและตัวติดตั้งใดที่อัปเดต คุณจะได้รับข้อผิดพลาดunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config

ดังนั้นวิธีที่ปลอดภัยที่สุดคือการอ้างอิงเวอร์ชัน / แท็กที่ตรงกับคอมไพล์ที่คุณติดตั้งไว้ ตัวอย่างเช่น:

https://raw.githubusercontent.com/git/git/v2.17.1/contrib/completion/git-completion.bash

หมายเหตุว่ามันมีv2.17.ใน URL masterแทน จากนั้นตรวจสอบให้แน่ใจว่าได้ระบุแหล่งที่มาในสคริปต์การเริ่มต้น bash


นี่คือคำตอบ macOS ที่ดีที่สุด
AShelly

ว้าว ... หลังจากใช้เวลาประมาณหนึ่งชั่วโมงในการทุบตีสมองของฉันเกี่ยวกับเรื่องนี้ความคิดเห็นของคุณคือกุญแจสำคัญ ขอบคุณสำหรับการแก้ปัญหานี้! โกลเด้น!
Myke Carter

4
ไฟล์เฉพาะเวอร์ชัน macos ควรอยู่ในดิสก์ที่นี่แล้ว: /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bashเพื่อความปลอดภัยฉันจึงแตกต่างกับเวอร์ชัน 2.17.1 บน github และมันตรงกัน
jmt

18

Ubuntu 14.10

ติดตั้งgit-coreและbash-completion

sudo apt-get install -y git-core bash-completion
  • สำหรับการใช้งานเซสชันปัจจุบัน

    source /usr/share/bash-completion/completions/git
  • เพื่อเปิดใช้งานเสมอสำหรับทุกเซสชัน

    echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc

1
ขอบคุณสิ่งนี้ใช้ได้กับฉันบน Ubuntu 16.04 LTS :)
Mrunal Pagnis


6

เพียงทำสิ่งนี้ใน~/.bashrc:

source /usr/share/bash-completion/completions/git

คำตอบอื่น ๆ กำลังบอกให้คุณติดตั้งbash-completionคุณไม่จำเป็นต้องทำเช่นนั้น แต่ถ้าคุณทำเช่นนั้นก็ไม่จำเป็นต้องจัดหาแหล่งที่มาโดยตรง คุณทำอย่างใดอย่างหนึ่งไม่ใช่ทั้งสองอย่าง

วิธีแก้ปัญหาทั่วไปเพิ่มเติมคือการค้นหาตำแหน่งระบบตามที่แนะนำโดยโครงการ bash-complete:

source "$(pkg-config --variable=completionsdir bash-completion)"/git

1
โซลูชันทั่วไปของคุณทำงานได้อย่างสมบูรณ์แบบสำหรับฉันบน Ubuntu 18.04 ในการบูตวิธีของคุณรัดกุมมาก - ขอบคุณ!
Jason R Stevens CFA

4

บนอูบุนตูของฉันมีไฟล์ติดตั้งอยู่ที่นี่:

source /etc/bash_completion.d/git-prompt

คุณสามารถติดตามลิงก์ใน/usr/lib/git-coreโฟลเดอร์ คุณสามารถดูคำแนะนำวิธีตั้งค่า PS1 หรือใช้งานได้__git_ps1


3

อาจเป็นประโยชน์สำหรับใครบางคน: -

หลังจากดาวน์โหลด. git-complete.bash จากลิงค์ต่อไปนี้

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

และพยายามใช้ฟังก์ชัน __git_ps1 ฉันได้รับข้อผิดพลาดเป็น -

 -bash: __git_ps1: command not found

เห็นได้ชัดว่าเราจำเป็นต้องดาวน์โหลดสคริปต์แยกจากมาสเตอร์เพื่อให้คำสั่งนี้ใช้งานได้เนื่องจาก __git_ps1 ถูกกำหนดไว้ใน git-prompt.sh คล้ายกับการดาวน์โหลด. git-complete.bash ให้รับ git-prompt.sh:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

จากนั้นเพิ่มสิ่งต่อไปนี้ใน. bash_profile ของคุณ

source ~/.bash_git
if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
export PS1='\W$(__git_ps1 "[%s]")>'
fi

source ~ / .bash.git จะเรียกใช้ไฟล์ที่ดาวน์โหลดและ

export PS1='\W$(__git_ps1 "[%s]") คำสั่งจะต่อท้ายชื่อสาขาเช็คเอาต์หลังไดเร็กทอรีการทำงานปัจจุบัน (หากเป็นที่เก็บ git)

จะมีลักษณะดังนี้: -

dir_Name[branch_name] โดยที่ dir_Name คือชื่อไดเร็กทอรีการทำงานและ branch_name จะเป็นชื่อของสาขาที่คุณกำลังทำงานอยู่

โปรดทราบ - __git_ps1 เป็นกรณีที่ละเอียดอ่อน


1

Arch Linux

ซอร์ส/usr/share/git/completion/git-completion.bashในไฟล์เริ่มต้น bash

ตัวอย่างเช่น:

# ~/.bashrc

source /usr/share/git/completion/git-completion.bash

คุณอาจพบสคริปต์ในตำแหน่งอื่น ๆ เช่น/usr/share/bash-completion/completions/gitแต่สคริปต์เหล่านี้ใช้ไม่ได้กับฉัน


-1

อูบุนตู

มีคำตอบที่สวยงามเป็นที่นี่ ทำงานให้ฉันบน Ubuntu 16.04

ของ windows

Git Bashเป็นเครื่องมือที่ช่วยให้การเติมข้อความอัตโนมัติ ไม่แน่ใจว่านี่เป็นส่วนหนึ่งของการแจกแจงมาตรฐานเพื่อให้คุณพบว่าลิงค์นี้มีประโยชน์เช่นกัน อย่างไรก็ตาม Git Bash อนุญาตให้ใช้คำสั่งเชลล์ Linuxเพื่อทำงานบน windows ซึ่งเป็นสิ่งที่ยอดเยี่ยมสำหรับผู้ที่มีประสบการณ์ในสภาพแวดล้อม GNU / Linux


-1

บน Github ในโครงการ Git พวกเขามีไฟล์ bash เพื่อเติมคำสั่งคอมไพล์อัตโนมัติ

คุณควรดาวน์โหลดลงในโฮมไดเร็กทอรีและคุณควรบังคับให้ bash รัน เป็นเพียงสองขั้นตอนและอธิบายอย่างสมบูรณ์ (ทีละขั้นตอน) ในโพสต์บล็อกต่อไปนี้

บล็อก code-worrier: autocomplete-git /

ฉันได้ทดสอบบน mac แล้วมันควรจะทำงานบนระบบอื่นด้วย คุณสามารถใช้แนวทางเดียวกันกับระบบปฏิบัติการอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.