Homebrew "git" tamamlamayı kullanmıyor


149

OSX'in git'i kullanırken, bir dosyayı değiştirdikten sonra basitçe yapabilirim git commit <tab>ve bu, dosyanın adını değiştirilmiş olana otomatik olarak tamamlar. Bununla birlikte, homebrew'den daha yeni bir git sürümü yüklersem ve onu kullanırsam, bu özellik artık çalışmıyor (yani basıyorum <tab>ve sadece değişiklik yapmayanlar da dahil olmak üzere bunu hangi dosyada yapmak istediğimi soruyor ” ).

Biri neden ve bunun nasıl çözüleceğine biraz ışık tutabilir mi? Daha güncel olduğu için homebrew'in gitini kullanmayı tercih ederim.

Benim kabuk zsh ve ne kurmadan bash-completionveya zsh-completionsçalışmış (hatta şu Homebrew en sonra talimatları sonrası yükleme).

Ayrıca, git'i homebrew ile kurduktan sonra

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Öyleyse bunlardan birini kullanmam gerekmez mi?


Ne sürümü zshve gitkullandığınız?
simont

Homebrew'den son haberler. zsh 5.0.2 ve git
1.8.1.3

1
Diğer gittamamlamalar işe yarıyor mu ( örneğin git co<TAB>==> git commit)?
simont

2
Burada birkaç farklı sorunun ortaya çıktığından şüpheleniyorum, ancak git aracılığıyla demeti yüklemek benim için bunu düzeltti. Görünüşe göre zsh-completionsmac git'ten memnun değildi, ancak daha önce iyi çalıştı (muhtemelen körü körüne 0.17.x'e güncellendi).
ti7

Yanıtlar:


291

Arıyorsun:

brew install git bash-completion

Warpc'nin yorumunda belirtildiği gibi, ~/.bash_profilehomebrew'in bash-tamamlama çalışmasını sağlamak için aşağıdakileri eklemeniz gerekir :

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Yukarıdakiler, bash tamamlama formülünü yüklediğinizde uyarılarda belirtilmiştir.


Not: Bash v4 veya sonraki bir brew install bashsürümünü (aracılığıyla ) kullanıyorsanız brew install bash-completion@2, kullanmak isteyeceksiniz , sekme tamamlamayı etkinleştirmek ~/.bash_profileiçin uyarılarda açıklandığı gibi aşağıdakileri ekleyin :

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Git, docker, youtube-dl ve $(brew --prefix)/etc/bash_completion.d/dizine dahil edilebilecek diğer tamamlamalar için ek dışa aktarma gereklidir .


3
Kabuğum zsh. Bu yapmam gerektiği anlamına mı geliyor brew install git zsh-completions? Ayrıca git'i homebrew ile kurduktan sonra diyor ki Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, bunlardan birini kullanamaz mıyım?
user137369

2
Ne yükleyerek bash-completionveya zsh-completions(hatta yükledikten sonra Homebrew en talimatları uyguladıktan sonra) çalıştı.
user137369

12
Bu içeriği bash durumu için ~ / .bash_profile'a da eklediniz mi: if [-f $ (brew --prefix) / etc / bash_completion]; sonra . $ (brew --prefix) / etc / bash_completion fi
warpc

5
Zaten demlenmeden git yükledim. Şimdi brew kullanarak bash_completion'ı kurmak istiyorum. Brew install bash-
complete'i

3
Bunun çalışması için git aracılığıyla demlemenin kurulmasının çok önemli olduğunu belirtmek gerekir. Git'in elma versiyonunun sorunun bir parçası olduğunu bilmiyordum. Bunu bilmeden önce bu yanıta olumsuz oy verdim ve şimdi yükseltemiyorum :(
Reimus Klinsman

113

Bu get's git sekme tamamlama, terminalinizi yeniden başlatmanıza gerek kalmadan OSX üzerinde çalışıyor:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile

14
Kullanırken ona tek astar demek biraz hile &&. Herhangi bir bash betiği bunun gibi tek satırlık olabilir.
user137369

1
Sen gerçek MVP'sin!
heez

2
brew installYöntemden kesinlikle daha iyi . Basitçe işe yaradığı için.
dchayka

2
Bash'in neden git-complete komutlarını almadığına dair bir çözüm bulmak için saatlerdir arıyordum. Sonunda bu işe yaradı! Çok teşekkür ederim!
TheAmazingKnight

1
Bu gerçek çözüm daha kolay
Rigin Oommen

22

Başkasının aptalca hatamı yapması durumunda, dene brew install git. Ben kullanıyordum gitXcode ile geliyor ve ben otomatik tamamlamalar almak için Homebrew en budala yüklü hiç fark etmedi.


19

Bazı nedenlerden dolayı dosyayı $(brew --prefix)/etc/bash_completionkaçırdım , bu yüzden @Graham Perks'in doğru cevabı benim için işe yaramadı

Benim durumumdaki düzeltme sona erdi:

brew unlink bash-completion
brew link bash-completion

@Graham Pixel'in cevabını takip ettikten sonra, bu sonunda benim için uyandı.
Luke

Bu aynı zamanda benim için Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) ve OS X Sierra 10.12.6'da bash-tamamlama 1.3 ile çalıştı.
jared

10

İdam edildiğinde $(brew --prefix)/etc/bash_completiongeri döndüğünü anlayarak sorunu çözdüm Permission denied. Yani basit bir şekilde:

chmod +x $(brew --prefix)/etc/bash_completion

Artık her şey yolunda gidiyor. bash_completionYine de, Homebrew'in dosyayı neden kurulumda çalıştırılabilir yapmadığını merak ediyorum .


5
Hayır, bu yanlış. tanımların kabuğunuzda bash_completionolması için source'd olması amaçlanmıştır ; yürütmenin hiçbir etkisi olmayacaktır.
Toddkaufmann

5

Çalışan bir çözüm buldum. Çok yeni (16 saat önce yazıldı ve 2 saat önce yapıldı) ve doğrudan homebrew'den geliyor .

brew install git --without-completions

Sadece denedim ve sonunda amaçlandığı gibi çalışıyor.


3
gitTamamlanmadan kurulumun çalışmama durumunu nasıl iyileştirebileceğini anlamıyorum. Graham Perks'in cevabının stackoverflow.com/a/14970926/1199564'ün doğru cevap olarak işaretlenmesi gerektiğine inanıyorum .
mgd

Benzer bir sorunla karşılaştım ve dosyayı yeniden yüklemeyi git --without-completionsve bash-completion.bashburadan kaynak .bash_profilesağlamayı büyük olasılıkla standart prosedürün ardından geçersiz kılındığını çözdüm .
Leonardo

1
Bu doğru bir cevap değil. @graham perks'in cevabı doğru.
CantGetANick

@CantGetANick Graham'ın cevabı sorunumu çözmedi, bu çözdü, bu yüzden işaretledim.
user137369

1
User137369 ile% 100 katılıyorum: homebrew'in bash tamamlama paketini zaten yükledim, bu yüzden @ graham'ın cevabı muhtemelen benim için işe yaramaz. Bununla birlikte, brew install gither şeyi düzeltti (--with-non-tamamlamalarına gerek yok). Bunun da doğru bir cevap olduğunu düşünüyorum.
bronson

5

Aynı sorunu yaşadım ve bu sabah bu yazıyı bile buldum. Brew ile güncelleyip brew updategit ile yeniden yükleyerek sorunu çözdüm brew reinstall git.

Daha sonra homebrew bağlantı sürecini engelleyen başka bir dosyadan haberdar oldum, benim durumumda öyleydi /usr/local/share/zsh/site-functions/git-completion.bash. Dosyayı kaldırmak ve çalıştırmak brew link gitsorunu çözdü. Tahmin ediyorum ki bu sadece karşılaştığımız kötü bir tarif versiyonuydu.


1
Ayrıca kullandığınız git sürümünün Apple'a ait olduğunu ve Homebrew tarafından yüklenen sürüm olmadığını fark edeceksiniz. En azından benim durumumda yaptım. Sürümü şununla kontrol edebilirsinizgit --version
Jonathan Knapp

Hayır! Bu hala benim için çalışmıyor. Her zaman OSX'in talimatını kullanmaya geri döndüm, bu tamamlanma bırakılamayacak kadar büyük bir özellik.
user137369

git -plete, Mavericks güncellemesinden sonra benim için çalışmayı bıraktı. Yapmalıydım brew reinstall gitve brew reinstall bash-completiontekrar çalıştırmalıydım.
Krešimir Nesek

3

$BASH_VERSION<4.1'e sahipseniz , örneğin şu şekilde 3.2.57(1)-releasedevam edin:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Bununla birlikte, brew install bashsürümü 4.4.12(1)-release almanız gerekiyorsa , daha iyi ve daha eksiksiz tamamlamaları şurada kullanabilirsiniz:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Bazı paketlerin (brew, docker, tmux) yine de bazı tamamlamalar koyacağına dikkat edin, $(brew --prefix)/etc/bash_completion.d/böylece ekleyebilirsin:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Son olarak git tamamlama komut dosyasını herhangi bir nedenle git kurulum şekliniz onu bunlardan hiçbirine eklemediyse ekleyebilmelisiniz:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

Yukarıdakilerle alabilir ve ekleyebilirsiniz.



1

Benim için koymak zorunda kaldım

source $(brew --prefix)/etc/bash_completion

.bashrcBunun işe yaraması için (.bash_profile değil) içine .

".bash_profile oturum açma kabukları için çalıştırılırken .bashrc etkileşimli oturum açma olmayan kabukları için çalıştırılır" - from .bash_profile ve .bashrc arasındaki fark nedir? Bana öyle geliyor ki, MacOS Sierra .bash_profileyalnızca yeni bir terminal penceresi açarken çalışmıyor .bashrc.

Bunu _bash_profile içine koymazdım, çünkü güncellemelerin yürürlüğe girmesi için yeniden başlatmam / oturumu kapatmam gerekir.


1

Bu benim için Mojave'de (OSX 10.14.1) çalıştı:

brew install bash-completion

Ardından aşağıdaki satırı ~ / .bash_profile dosyanıza ekleyin:

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

Sadece uyarıların sayısını
Hussain Akram

1

2019'da, Bash v5'i kullanarak, git bash tamamlama komut dosyasını sizin .bash_profileveya.bashrc

  1. Aşağıdaki iki satıra sahip olduğunuzdan emin olun. .bashrc
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
  1. Git bash tamamlama komut dosyası (İndir https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) ve kaydedin /usr/local/etc/bash_completion.d/olarakgit

Bu kadar! Bash, git tamamlama dosyasını otomatik olarak alacak ve tamamlamayı etkinleştirecektir.


Yan Not: Tüm bu değişiklikleri eklemenizi tavsiye ederim, .bashrcçünkü bu, etkileşimli bir kabuğa (yani, pipenv shell) bıraktığınızda , tamamlamaların, bash kaynak olacak .bashrcve DEĞİL olacak şekilde doğru şekilde yüklenmesini sağlar .bash_profile.


0

Lion'da okuma satırı yerine libedit'in kullanılmasıyla ilgili olabilir.

Git'ten önce readline'ı yüklemeyi deneyin.

brew install readline

0

Zaten brew bash-tamamlama yüklemiş olanlar için. Git tamamlama komut dosyasını yüklemedim ve bunun için herhangi bir dokunma bulamadım.

Ben de manuel olarak ekledim:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Çalışması için dosyayı yeniden adlandırmanız ve uzantıyı kaldırmanız gerektiğini unutmayın.

Tamamlama veya git yüklemediyseniz, kabul edilen yanıta kurun.

brew install git bash-completion


0

Git'i yüklemek için homebrew kullandıysanız, muhtemelen git tamamlamayı desteklemek için herhangi bir şey yüklemenize gerek yoktur. "git-complete.bash" dosyası bir yerde (benimki buradaydı: /usr/local/git/contrib/completion/git-completion.bash)

Tek yapmanız gereken dosyayı bulmaktır: sudo find / -type f -name "git-complete.bash"

Ardından yolunu .bash_profile dosyanızda kaynaklayın. Örneğin bu satırı ~ / .bash_profile dosyama eklemem gerekiyordu:

source /usr/local/git/contrib/completion/git-completion.bash

~ / .Bash_profile dosyanıza kaynak sağlamayı veya terminalinizi yeniden açmayı unutmayın;)

from: nasıl-etkinleştir-git-tab-tamamlama-bash-mac-os-x


@ user137369 öyle - çünkü burada zaten kurulu olan şeyleri yüklemenize gerek yok ...
Dozon Higgs

0

Bunun eski bir gönderi olduğunu biliyorum, ancak gerçekten herhangi bir ek paket kurmanıza gerek yok.

Homebrew, ihtiyacınız olan her şeyi içeren bir dizin olduğunu size bildiriyor.

.bash_profileBash kullanıyorsanız , aşağıdaki satırı kolayca ekleyebilirsiniz :

source /usr/local/etc/bash_completion.d/git-completion.bash

0

MacOS Catalina'daki bash için, Bash 5'i homebrew'den de kullanmak istiyorsanız, oturum açma kabuğunuzun varsayılan değil homebrew's bash olarak ayarlandığından emin olmanız gerekir .

Bunu yapmanız gerekip gerekmediğini kontrol etmek için echo ${BASH_VERSION} . 3 ile başlayan bir sürüm görürseniz, oturum açma kabuğunuz için Brew's bash'ı kullanmıyorsunuz demektir.

Bunu değiştirmek için,

  1. System Preferences-> Users and Groups.
  2. Kullanıcınızı sağ tıklayın ve "Gelişmiş Seçenekler" i seçin. Sol alttaki kilidi tıklayarak şifrenizle bunun kilidini açmanız gerekebilir.
  3. Set login shellgenellikle çalıştırarak bulabilirsiniz Brew en Bash noktalara taşır alanını which bashbir terminalde Eğer demlemek en bash yükledikten sonra . Benimki /usr/local/bin/bash.

Terminalinizi yeniden başlatın ve bu mükemmel yanıttaki talimatları izleyin


-1

MAC-OS Mojave 10.14'te GIT komutlarının Otomatik Tamamlanmasını etkinleştirin Bir geliştiriciyim ve her zaman komut satırından GIT kullanıyorum. Geliştirme perspektifini düşündüğümde, GIT işlemleri için komut satırını kullanarak çok sayıda komut çalıştırırdım. Çoğu zaman, MAC OS'nin kısmen desteklediğim komut tamamlama için otomatik desteğe sahip olmaması çok sinir bozucu. yazılan karakterler için kullanılabilen komutların ne olduğu anlamına gelen komut önerilerinin yanı sıra. Bu yüzden çok uzun bir komut yazmak çok zahmetli ve yazım hatası yanlış gittiği için çoğunlukla tekrarlayan görevler. :(

Sekme tamamlama kesinlikle daha hızlı ve daha kolay olacaktır. Ne yazık ki, bazı Mac bilgisayarlarda git'in varsayılan kurulumunda sekme tamamlama etkin değildir.

Böylece sorun için bir düzeltme arıyordum ve StackOverflow, GitHub gibi web aramasından ve ortamdan bulunan birkaç çözüm var. Ne yazık ki, bu çözümler benim için işe yaramadı ve birçok kez farklı çözümler denemekten hüsrana uğradı.

Derinlemesine araştırıyordum ve farklı çözümler deniyordum ve neyse ki bu kolay bir düzeltme. Aşağıda birkaç gönderiden topladığım adımlar ve nihayet beklendiği gibi çalıştı. Bu yüzden benim gibi bu sorunu yaşayan diğerleriyle paylaşmayı umuyorum.

web aramasına giderseniz ve git tamamlama bash dosyasından bahseden birçok çözüm bulabilirsiniz. GitHub kılavuzu bile. Ama önce git-complete.bash dosyasının git-core veya kurulumdan gelen başka bir şeyin yüklü olduğu MAC bilgisayarınızda olup olmadığını kontrol etmenizi öneririm. aşağıdaki komutu kullanabilirsiniz.

sudo find / -type f -name "git-completion.bash"

aşağıdaki sonuçları alacaksınız. (içeriğe göre biraz farklılık gösterebilir)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Git-core'dan hangisinin yüklü olduğunu seçmenizi öneririm

Git-complete.bash betiği makinenizde yoksa, lütfen yukarıda verilen komut dosyasını geri alın ve / usr / local / etc / içindeki git-complete.bash adlı yeni bir dosyaya yerel makinenize kaydedin. bash_completion.d / dizin.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Bash kabuğunu kullanırsanız, Git, etkinleştirebileceğiniz güzel bir otomatik tamamlama komut dosyasıyla birlikte gelir. Doğrudan adresindeki Git kaynak kodundan indirin

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Git-complete.bash betiği makinenizde mevcutsa, ancak /usr/local/etc/bash_completion.d/ dizininde değilse, bu dizini oluşturmalı ve dosyayı içine kopyalamalısınız. Aşağıdaki komut işi yapacak:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

Yukarıdakilerin tamamlanmasından sonra. Git -plete.bash betiği yerel makinenizde / usr / local / etc / bash_completion.d / dizininde bulunmalıdır.

Şimdi aşağıdaki komutu kullanarak profilinizi yenilemeniz gerekiyor. Eklediğiniz bash dosyanızı terminal içeriğine yükleyecektir.

source ~/.bash_profile

Harika!!! başardın. Sadece terminal penceresini başlatın ve deneyin. Sadece "git sta" yazın, aşağıdaki gibi öneriler gösterecektir:

git sta
stage    stash    status
git chec<TAB> will show git checkout

GitHub yayınıma buradan bakın:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Medium gönderimi burada görün:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.