Bash-tamamlama kuralları korunmak için 'git' ile 'g' arasında nasıl takılır?

23

Bunu yaparsam:

alias g='git'

Tüm tamamlama kurallarını kaybediyorum (örneğin, yazdıktan sonra SEKME'ye bastığımda, şubeler ve uzaktan kumandalar artık otomatik olarak tamamlanmıyor, örneğin g push o ).

    
sordu Paweł Gościcki 19.09.2011 15:02

8 cevap

20

/etc/bash_completion.d/git 'den uygun bir şekilde kopyalama ve değiştirme, ~/.bashrc ' na aşağıdaki satırları ekleyin:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
    
verilen cevap enzotib 19.09.2011 15:20
14

Son bash-tamamlama upstream taşındı ve biraz şeyler yeniden adlandırıldı. Şimdi:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Karşılaştığınız zaman, Ubuntu'nun (ör., 14.04, ayrıca Fedora 22+) son sürümlerinde bunu kullanın:

completion: function '_git' not found

tamamlama sırasında.

    
verilen cevap lzap 30.06.2015 16:58
6

~/.bashrc :

içinde
alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g

İşte ile

    
verilen cevap hnasarat 22.10.2014 17:48
1

bunu yapmanın güncellenmiş yolu (tamamlama benim için işe yaramaz):

  1. cd - giriş dizininize geçin
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. .bashrc dosyanıza source ~/git-completion.bash ekleyin (bu dosyanın ana klasörünüzde olmaması durumunda, bash otomatik olarak arar)
  4. .bashrc dosyanıza alias g='git' ekleyin.
  5. Yeni bir oturum başlatın veya değişikliklerinizi source ~/.bashrc ile kaynak kodlayın
verilen cevap Elijah Lynn 30.07.2013 15:56
1

İlk önce orijinal tamamlama komutuna bakın. Örnek:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Şimdi bunları başlangıç ​​komut dosyanıza ekleyin (ör. ~ / .bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

_completion_loader satırı gerekli olmayabilir. Ancak bazı durumlarda, tamamlama işlevi yalnızca komutu yazdıktan sonra dinamik olarak yüklenir ve ilk kez TAB tuşuna basılır. Eğer orijinal komutu kullanmadıysanız ve diğer% +% co_de takma adını kullanıyorsanız, "bash: completion: function not found" gibi bir hata alabilirsiniz.

    
verilen cevap wisbucky 27.07.2018 00:59
0

Tamlık adına, bash-completion komut dosyasının sonunda elde edilen ~/.bash-completion dosyasını kullanarak bir cevap eklemek istiyorum:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

Ardından ~/.bashrc 'de sadece takma adlara sahibim. Ben deniyordum:

  • ~/.bashrc 'yi bash tamamlama öğeleriyle işaretlemekten kaçının (öğeleri ait olduğu yere bırakın) ✓
  • tüm git tamamlamasının kabukuma eklenmesi ☹

Unututurucu olarak _xfunc , git-bitirmeyi yine de kaynak yapar. Bunu nasıl yapacağımı anladığımda bu cevabı güncelleyeceğim (öğle yemeğinde de sordum. buradaki ).

    
verilen cevap kub1x 26.02.2016 14:00
-1

Şuraya bakın: İşte

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

(^ o ^)! Enjoy /

    
verilen cevap scue 14.05.2015 09:10
-1

Diğer takma adları her zamanki gibi tanımlayabilirsiniz:

alias g='git'

Ardından, bash tamamlama takma adını sağlamak için tam-alias 'ı yükleyin.

    
verilen cevap Cyker 24.12.2016 08:27

Etiketlerdeki diğer soruları oku