git komut satırında * dalları * için otomatik tamamlama?


350

Linux makinemde Git ile şubeler için otomatik tamamladım.

[Unutmayın, git şube tamamlamadan bahsediyoruz, bash tamamlamadan değil (örneğin komutlar, dosyalar vb.). Böylece Lane'in hiç cevabı DEĞİL ]

Örneğin, git checkout+ TAByazıp dalların bir listesini alabilirim.

Veya "feb" ile başlayan tüm dalları almak için git checkout feb*+ yazabilirim TAB.

Bu işlevselliği Mac'te nasıl edinebilirim?

Ben indirip çalıştıran çalıştı bash-completion/bash_completionve bash-completion/bash_completion.sh.inhiçbir sevinç ama. İlki hakkında hata mesajları verdi declare: -A invalid_option. İkincisi hata yapmadı. Ne zaman git checkout+ TABHala dalları, dizindeki dosyaların listesini değil alıyorum gerçi. Ben proje kökündeyim.

Dizinler ve bash komutları için otomatik tamamlama tamam çalışıyor, bu yüzden Git'e özgü.

Yanıtlar:


483

tamam, git git otomatik tamamlama betiğine ihtiyacım vardı .

Bunu şu url'den aldım:

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

Bu, ana dizininiz ( ~) ile hedef olarak kullanıldığında, hangi dizinde bulunduğunuz konusunda endişelenmenize gerek yok .

Sonra ~/.bash_profiledosyama şu 'eğer varsa çalıştır' kodunu ekledim :

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

Güncelleme: Dosyamı küçültmek için bu kod parçalarını daha özlü hale getiriyorum .bashrc, bu durumda şimdi kullanıyorum:

test -f ~/.git-completion.bash && . $_

Not: $_önceki komutun son argümanı anlamına gelir. yani . $_koşmak demek - .git-completion.bashbu durumda olmak

Bu hala hem Ubuntu hem de OSX üzerinde ve script scriptsiz makinelerde çalışmaktadır .git-completion.bash.

Şimdi git Tab(aslında git TabTab) bir cazibe gibi çalışıyor!

ps: Bu yarasadan çalışmazsa, chmod u+x ~/.git-completion.bashkendinize gerekli izni vermek için kaçmanız gerekebilir:

  • chmod dosya izinlerini değiştiren komuttur
  • u dosyanın sahibi olan kullanıcı, varsayılan olarak oluşturucusudur, yani siz
  • + izin ayarlamak / etkinleştirmek / eklemek demektir
  • x yürütme izni anlamına gelir, yani komut dosyasını çalıştırma yeteneği

1
Evet, bash betiğini ekledikten sonra terminalin yeniden başlatılması çalışmasını sağladı. Bunun benim için otomatik tamamlamak için çalışıyor tuttu niye merak burada oturuyordum Modelsben vurduğunda klasöre m Tabo kadar otomatik olarak tamamlayacak yapmak master.
Alex,

1
Ayrıca bkz . Farklı bir ipucu için unix.stackexchange.com/q/48862/10043
Michael Durrant

3
Kabul edilen cevap kimse için çalışmıyorsa, şunu deneyin: source ~/.bash_profilekodu yapıştırdıktan sonra. Terminali yeniden başlatmak da aynı şeyi yapacaktır.
Ben

Teşekkür ederim! Başka şeyler denedim ama hiçbir şey işe yaramadı (bu github.com/bobthecow/git-flow-completion/wiki/… dahil ). Çözümünüz bir cazibe gibi çalıştı;)
rgoliveira

1
( gitApple demosuna sahip değilsiniz git) brew install gitve garip hatayla karşılaşanlar için terminali yeniden başlatıngit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
Sachin

89

Bazı insanlar Mac OS paketlerini yükleme, güncelleme ve yapılandırma işlemlerini otomatikleştirmek için paket yöneticisi kullanmayı tercih ediyor. Paket yöneticilerinin hayranıyım ve Homebrew'in Mac OS için en iyi paket yöneticisi olduğunu düşünüyorum (bazıları bunun fiili Mac OS paket yöneticisi olduğunu söyleyebilir).

Eğer Homebrew kurduktan sonra, sadece yükleyebilirsiniz budala birlikte bash tamamlama ile brew install git bash-completion.

Daha sonra ~/.bash_profileşunları içine yazmanız gerekir :

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(Not: Bu yükleme 404 hatasıyla başarısız olursa ve zaten gitmişseniz, bu demleme kurulumunun git bölümünü kaldırmanız yeterlidir)

Git ve bash-tamamlamanın brew ile yapılması hakkında daha fazla bilgi.


27
Ekleme gitve ekleme bash-completion, ekleme ile aynı değildir .git-completion.bash Farklı programlardır ve oldukça farklı şeyler yaparlar - biri bash komutu otomatik tamamlama yapar, diğeri git komutu otomatik tamamlama yapar ve 'twain tanışır;)
Michael Durrant

cazibe gibi çalışmak, çok teşekkürler. Lütfen beni eklettirdiğiniz betiğin kullanımının ne olduğunu açıklayabilir misiniz ~/.bash_profile?
Vikas Bansal

Başkalarının bu cevapla ilgili söylediklerine rağmen, git otomatik tamamlama işleminin terminalde çalışmasına neden olandır.
Iain

32

Bunu terminalde çalıştırın:

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

Ardından, bunu yapın:

vi ~/.bash_profile

Bu satırları ekle:

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

Bu kadar. Bu benim için çalıştı.


1
(2. adım) Herhangi biri bash_profile dosyasını bir metin editörüyle açmayı tercih ederse, sadece şunu yapın: open -e .bash_profile
Nicolas Bodin-Ripert

2
Bakire bir Mac OS High Sierra'da ~/.bash_profiledosya mevcut değil. Sorun değil sadece dosyayı oluşturun ve o ifbetiği buraya yerleştirin ve kaydedin. Sonra kabuğunuzu yeniden yükleyin ve işe yarayacak.
agm1984

11

gitve git-completion.bashzaten macOS komut satırı araçları ( xcode-select --install) ile gelir. Bash otomatik tamamlama özelliğini etkinleştirmek için bunu kendinize ekleyin ~/.bash_profile.

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

Bu, git dalları için otomatik tamamlamayı da etkinleştirir.


Komut satırı araçları yüklü olduğundan eminim, ancak bu dosya benim durumumda mevcut değil. Yine de demlemekle mutluyum (ve gitmem de demlemekle olduğu için, belki de daha akıllıca).
drevicko

Teşekkürler! IMO, yeşil onay işaretli cevap bu olmalı.
geekisthenewcool

8

İşte bazılarınızın kafasını karıştıran şey şudur: demleme veya port takılı, ancak içinde bulunan bir sistemi kullanıyorsunuz /usr/bin/. Bunu kontrol etmek için:

which git

Görüyorsanız /usr/bin/git, demleme ya doğru şekilde yapılandırılmamıştır veya git demeti üzerinden gitmediniz.

Git'i demlemek yoluyla kurarsanız, demlemek için bash tamamlamalarını etkinleştirmek git için de bash tamamlamalarını etkinleştirir. Bunun sebebi /usr/local/etc/bash_completionaslında herşeyi /usr/local/bash_completion.diçeriyor olması ve git için brew paketinin orada bir git tamamlama betiği yüklemesi.


Bu mantıklı geliyor, ancak "demleme için bash tamamlamalarını nasıl etkinleştirirsiniz"? Bunu nasıl kaçırıyoruz, bu Cevabınız parçası olmalıdır
skplunkerin

Sadece bunu yoluyla (o, teşekkür ederim çalışır) simplified.guide/macos/bash-completion , ancak otomatik tamamlama ... Bir kaç saniye gecikmeli garip
skplunkerin

4

"Bash_completion" seçeneği etkinken bash ve git'i MacPorts'tan kurabilirsiniz. Muhtemelen hem gitmeyi hem de tamamlamaları güncel tutmanın en kolay yoludur.

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

MacPorts'u yüklemek için: http://www.macports.org/install.php/

ilave bilgi

Linux sisteminizdeki tamamlama ayarlarını bulmak için /etc/bash_completion.d/git dosyasına bir göz atın (uzun bir dosyadır). Tamamen çalışma çerçevesinin / etc / bash_completion (/etc/profile.d/bash_completion.sh adresinden alınmıştır); .d / etc / profile adresinden alınmıştır.


2

Git tamamlama işleminiz kısmen bozulduysa, satın alma işleminden sonra bile https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, git sürümünüzü güncellemeniz gerekebilir.

Örneğin, git check+ yazdığımda TABdoğru şekilde otomatik olarak tamamlandı git checkout. Ancak git checkout+ yazdığımda TAB, yalnızca dallar listesini göstermedi HEAD.

Benim için düzeltme sürümümü güncellemekti git. 2.7.0'daydım, görünüşe göre en son ile uyumlu değildi git-completion.bash. Koştum brew upgrade git2.13.0 güncellemiş olan ve şimdi düzgün benim şube isimlerini otomatik olarak tamamlar.


Ben aynı sorunu başlamıştı, ama acelem vardı brew upgrade gitve brew link git (geçersiz kılma etkin)
Tope

1
@Tope yakalamak için teşekkürler. Değiştim updateiçin upgrade.
wisbucky

2

Bu sorunu çözmek için bulduğum en iyi referans , Connor Livingston'dan SpinDance hakkında :

Eğer git-completion.bash komut makinenizde yok, ben (ki yukarıda verilen linki çağırın lütfen bu ) ve adında yeni bir dosyaya yerel makineye kaydetmek git-completion.bash içinde / usr / yerel / etc / bash_completion.d / dizin. Eğer git-completion.bash komut makinenizde var, ancak değil /usr/local/etc/bash_completion.d/ dizinine, o dizinde bir kopyasını oluşturması gerekir. Hızlı bir sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash hile yapmalı. /Usr/local/etc/bash_completion.d/ hakkında merak edenler için dizin: yeni tamamlama komutlarını saklamak içindir ve makinenizde yoksa, oluşturmanız gerekebilir.

Bu noktada git-completeion.bash betiği yerel makinenizde /usr/local/etc/bash_completion.d/ dizininde bulunmalıdır . Şimdi git tamamlama komut dosyasını ~ / .bash_profile dizinine tıklayarak bash'a bağlayacağız .

Not: Önceki cümlede bulunan tilde, bilgisayarınızdaki giriş dizinini ifade eder. Aşağıdaki satırı ~ / .bash_profile dosyasına ekleyin : source /usr/local/etc/bash_completion.d/git-completion.bash ve kaydedin. Son adım, bash profilinizi yeniden yüklemektir. Bunu, mevcut bash oturumunuzdaki source ~ / .bash_profile komutunu çalıştırarak yapabilirsiniz .


1

Denedim ve dallar için iyi çalışıyor ama bunu git st+ yaptığınızda böyle bir tabhatayı gösteriyor

bilinmeyen seçenek: --list-cmds = list-mainporcelain, diğerleri, yardımcılar, takma adlar, listenin tamamı, config kullanımı: git [--version] [--help] [-C] [-c =] [--exec -yolu [=]] [--html-path] [--man yolu] [- bilgi yolu] [-p | - sayfalandır | - no-pager] [--no-değiştir-nesneler] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

İnternet arama ve tespit --list-cmdsiçinde .git-completion.bashGit en son sürümünde ve benim mac git versiyonu oldu2.17.2

İşte çözümler

1. Çözüm

  1. Git git --versionkomutunu kullanarak git sürümünü kontrol edin.
  2. Ardından url’de yaptığım gibi aynı sürüm numarasını girin

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. Ardından, üst cevaptaki ile aynı adımları izleyin, aşağıdaki kodu ~/.bash_profile

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

2. Çözüm

Git sürümünü en son güncellemeye çalışmalısınız, sonra çalışması gerekir.


0

Oh-my-zsh'i kurun ve zsh'ı varsayılan kabuğunuz olarak ayarlayın ve daha sonra bana teşekkür edin :)


Bunu yaptım, kesinlikle uğraşmak zorunda
kalmama umuduyla

Aslında oh-my-zsh'a veya hatta başka bir eklenti sistemine bile ihtiyacınız yok ! Git tamamlama işlemi kutudan çıkıyor, onu etkinleştirmeniz yeterli
SilverWolf

0

Çoğu kullanıcı gitxcode komut satırı araçlarının bir parçası olarak kurmuş olacak /usr/bin/gitve git için bash tamamlama kuralları mevcut olacaktır /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

Bu durumda, Homebrew'den git'i yüklemeye veya raw.githubusercontent.com'dan gitmeyi tamamlama kurallarına gerek yoktur. Sadece aşağıdaki gibi bir sembolik link oluşturun:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

Not: bash-completionPaketin Homebrew'den yüklendiğinden ve yapılandırıldığından emin olun .


-2

.bashrcDosyanızı bulun .

Aç ve bu satırı en altına ekle:

source /etc/bash_completion.d/git


1
/etc/bash_completion.d/Nispeten yeni bir sistemde bir klasörüm yok, (OSX 10.10.3).
livingtech

Oluşturmayı dene.
crmpicco

Bash_completion değil, farklı şeyler yapan git_completion.
Michael Durrant,

@MichaelDurrant Çalışır. Güven Bana. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@crmpicco Lütfen oluşturma için talimatlar verebilir misiniz /etc/bash_completion.d/git? Cevabınızı daha değerli yapar.
Dannid
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.