Git takma adlarımın bir listesini nasıl basabilirim, yani bash alias
komutuna benzer bir şey ?
Git takma adlarımın bir listesini nasıl basabilirim, yani bash alias
komutuna benzer bir şey ?
Yanıtlar:
Bu cevap üzerine inşa cevap tarafından johnny . Eğer kullanmıyorsanız eğer uygular git-alias
dan git-extras
.
Linux'ta bir kez çalıştırın:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
Bu, dosyanızda alias
depolanan adlandırılmış bir kalıcı takma ad oluşturur ~/.gitconfig
. Bunu kullandığınızda tüm git takma adlarınız ~/.gitconfig
dosyadakiyle hemen hemen aynı formatta listelenir . Kullanmak için şunu yazın:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
Aşağıdaki hususlar geçerlidir:
Takma adın alias
yukarıdaki gibi listelenmesini önlemek için | grep -v ^'alias '
kapanış çift tırnak işaretinden hemen önce ekleyin . Kullanıcıların komutun alias
bir takma ad olduğunu ve git özelliğinin olmadığını unutmalarını önermiyorum .
Listelenen diğer adları sıralamak için | sort
kapanış çift tırnak işaretinin hemen öncesine ekleyin . Alternatif olarak, diğer adları ~/.gitconfig
sıralı tutabilirsiniz .
Diğer adı sistem çapında bir diğer ad olarak eklemek için --global
(geçerli kullanıcı için) yerine --system
(tüm kullanıcılar için) yazın. Bu genellikle /etc/gitconfig
dosyaya girer .
alias.
her satırın başında kurtulur
git config --global alias.alias "! git config --get-regexp ^alias\."
. Alternatif olarak, git version
git'in güncel bir sürümüne sahip olduğunuzdan emin olun.
$ git config --get-regexp diğer adı
'^alias\.'
git config -e
ve sonra [alias]
bölümü bulmak için gözlerinizi kullanın . Ancak git hayranları, problemlerini çözmek için gerekli olmadığında bile, her zaman biraz komut dosyası veya düzenli ifade eşleşmesi gibi görünüyorlar :)
git config -e
.git/config
yalnızca dosyayı düzenler . Ancak takma adların çoğu küresel olarak tanımlanır ~/.gitconfig
.
git config --global alias.aliases config --get-regexp '^alias\.'"
... ve sonragit aliases
"
yerde eksiksiniz
alias
Tam olarak bu amaç için (garip bir şekilde) adlı bir git takma adı oluşturdum ... eğer yeterince takma ad kullanıyorsanız , zaman zaman kullanışlı ...
$ git config --global alias.alias "config --get-regexp ^alias\."
Not normal ifade emin çizgi ile başlar yapar alias.
.
--system
yerine, --global
böyle bir şeyin kullanıcı düzeyinde değil, sistem düzeyinde daha yararlı olmasını öneriyorum .
alias = config --get-regexp ^alias\\.
.
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Başka bir alternatif (sadece hatırlaması kolay bulduğum bir şey):
git config --list | grep alias
alias
takma adı bir kez oluşturabilir ve hatta yarattığınızı bile unutabilirsiniz.
-l
uygun bir kısayol olarak kullanabilirsiniz , --list
ancak takma adları listelemek için bir takma ad oluşturma fikrini seviyorum.
git config --list | grep -E '^alias'
'Bash senaryosu' duydum mu? ;)
Yukarıdaki bir yorumdaki 'gerekli değil' kısmı hakkında, temel olarak takma adlarım için genel bakış gibi bir man sayfası oluşturdum. Neden bütün yaygara? Bu tam bir abartı değil mi?
Okumaya devam etmek...
Benim gibi .gitconfig, böyle ayrılmış komutları ayarladım TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
ve sadece tanımlanan takma TAB=adların bir kısmını gliflemek için başka bir takma ad tanımladı. (Diğer tüm seçeneklerin tanımlarında '=' öncesi ve sonrasında sekme yoktur, yalnızca boşluklar vardır.)
Bir takma ada eklenmeyen yorumlar da TAB===== ada eklenmeyen yorumlar da ektedir, bu nedenle selamlandıktan sonra gösterilirler.
Daha iyi görüntüleme için ben grep çıktı daha az, bu gibi boru:
#.gitconfig
[alias]
# use 'git h <command>' for help, use 'git la' to list aliases =====
h = help #... <git-command-in-question>
la = "!grep '\t=' ~/.gitconfig | less"
'\t=
' Bölümü eşleşir TAB=.
Hangi takma adlara sahip olduğum hakkında daha iyi bir genel bakış elde etmek için ve bash konsolunu kullandığım için çıktıyı terminal renkleriyle renklendirdim:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
Temelde yukarıdaki ile aynı, sadece sed , renk kodlarını çıktıya almak için kullanımı eklenir.
Daha az-R
bayrağı gösterilen renkleri elde etmek için gerekir.
(Kısa bir süre önce, pencerelerinin altında kaydırma çubuğu bulunan uzun komutların mobil cihazlarda doğru bir şekilde gösterilmediğini öğrendim: Metin kesiliyor ve kaydırma çubuğu basitçe eksik. Buradaki son kod snippet'inde durum böyle olabilir, hareket halindeyken kod parçacıklarına bakarken dikkat edin.)
İhtiyaçlarıma göre uyarlanmış yarım mil uzunluğunda bir takma adım var.
Ayrıca bazıları zamanla değişir , bu nedenle elinizde güncel bir listeye sahip olmak için en iyi fikir .gitconfig'i ayrıştırmaktır.
.Gitconfig takma adımdan bir kısa kısa alıntı:
# choose =====
a = add #...
aa = add .
ai = add -i
# unchoose =====
rm = rm -r #... unversion and delete
rmc = rm -r --cached #... unversion, but leave in working copy
# do =====
c = commit -m #...
fc = commit -am "fastcommit"
ca = commit -am #...
mc = commit # think 'message-commit'
mca = commit -a
cam = commit --amend -C HEAD # update last commit
# undo =====
r = reset --hard HEAD
rv = revert HEAD
Benim linux veya mac iş istasyonlarında .bashrc'lerde de başka takma adlar var:
#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt
Bu şekilde yazmaya gerek yok, gerek git help submodule
yok git h submodule
, sadece gh submodule
yardım almak için gereken her şey. Sadece bazı karakterler, ama ne sıklıkla yazıyorsunuz?
Aşağıdakilerin tümünü kullanıyorum, elbette sadece kısayollarla ...
Bu sadece kafamın tepesindeydi.
Git komutlarının birçoğu grafik ön uçların herhangi birinde düzgün bir şekilde uygulanmadığından, git'i bir gui olmadan kullanmak zorundayım. Ama onları her kullandığımda, çoğunlukla aynı şekilde oluyor.
Son paragrafta belirtilen 'uygulanmadı' kısmında:
Henüz bir GUI'de buna benzeyen bir şey bulamadım:
sba = show-branch --color=always -a --more=10 --no-name
- tüm yerel ve uzak şubeleri ve bunların içindeki taahhütleri göster
ccm = "!git reset --soft HEAD~ && git commit"
- son taahhüt mesajını değiştir
Daha basit bir bakış açısından:
Ne sıklıkla yazıyorsunuz git add .
veya git commit -am "..."
? ... hatta dinlenme saymazsak
gibi çalışmalara şeyler alma git aa
veya git ca "..."
pencerelerde,
ya bash takma adla gaa
/ g aa
veya gca "..."
/ g ca "..."
linux ve mac en üstünde ...
İhtiyaçlarım için git komutlarını bu şekilde uyarlamak akıllıca bir şey gibi görünüyordu ...
... ve daha kolay kullanım için sadece daha az kullanılan komutlar için kendime yardımcı oldum, bu yüzden her zaman man sayfalarına başvurmak zorunda değilim. Komutlar önceden tanımlanmıştır ve bunları aramak mümkün olduğunca kolaydır.
Sonuçta biz programcıyız? İşlerin onlara ihtiyaç duyduğumuz gibi çalışmasını sağlamak bizim işimiz.
İşte ek bir ekran görüntüsü, bu Windows'da çalışıyor:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
her şeyden önce bir tane var =
mı? Boşluklarla çalışmaz. Pencerelerimde boşluklar vardı .gitconfig
, bunları tek bir tabstop ile değiştirdikten sonra cmd.exe beklendiği gibi davranıyor.
Belirtilen diğer yanıtlar gibi git config -l
, yapılandırma dosyanızdaki tüm yapılandırma ayrıntılarınızı listeler. İşte benim yapılandırma için bu çıktı kısmi bir örnek:
...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...
Böylece, takma ad hatlarını kullanarak git config -l | grep alias
şunları yapabiliriz:
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
Biz sadece bu güzel yapabilir cut
dışarı ting alias.
bu komutla bize bırakarak her satırın bir parçası:
git config -l | grep alias | cut -c 7-
Hangi baskılar:
force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
Son olarak, bunu takma ad olarak eklemeyi unutmayın:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Zevk almak!
Ben "ile Haziran 2018 bahsedilen - en çok kullanılan git komutları bakış listeye Git 2.18" kullanım " --list-cmds=alias
( 3301d36 işlemek )", yani carej yer alan haberlere onun cevabını .
git --list-cmds=alias
Buna veya ofisine ek olarak , çıkışını Git 2.14.x / 2.15 ile değişecek olan çıktı git config --get-regexp alias
ile birleştirebilirsiniz git help
:
"
git help co
" şimdi "co is aliased to ...
" değil "git co is
" diyor .
Bakınız Kaartic Sivaraam ( ) tarafından b3a8076 (12 Eyl 2017) taahhüdüsivaraam
.
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 5079cc8 tamamlama 2017 25 Eki)
help
: daha kesin olmak için bir mesajı değiştirinKullanıcı
--help
takma addaki komutta ' ' seçeneğini kullanmaya çalıştığında takma ad hakkındaki bilgiler aşağıda gösterildiği gibi yazdırılır:
$ git co --help
`git co' is aliased to `checkout'
Kullanıcı doğru şekilde '
co
' değil 'git co
' değil , bu doğru görünmüyor .
Bu, kullanıcının 'tgit
' gibi bir takma ad kullandığı durumlarda bile yanlış olabilir .
$ tgit co --help
`git co' is aliased to `checkout'
Kullandığım bu takma benim küresel içinde~/.gitconfig
# ~/.gitconfig
[alias]
aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1
Aşağıdaki çıktıyı üretmek için
$ git aliases
aliases --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci --> commit -v
cim --> commit -m
co --> checkout
logg --> log --graph --decorate --oneline
pl --> pull
st --> status
... --> ...
( Not: Bu benim için Windows'ta git bash'da çalışır . Diğer terminaller için kaçmayı uyarlamanız gerekebilir. )
!git config --get-regexp ^alias\\.
git config ile başlayan tüm satırları yazdırır alias.
sed -e s/^alias.//
alias.
hattan çıkarırsed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
bir boşluğun ilk oluşumunu \\ $(printf \"\\043\")--\\>
(olarak değerlendirilir #-->
) ile değiştirir.column -t -s $(printf \"\\043\")
tüm satırları eşit aralıklı sütun tablosuna biçimlendirir. Karakter $(printf \"\\043\")
değerlendirir için #
ayırıcı olarak kullanılır.sort -k 1
tüm satırları ilk sütundaki değere göre sıralar$ (printf \ "\ 043 \")
Bu sadece #
sütun ayırma için kullanılan karakteri (hex 043) yazdırır . Bu küçük kesmek kullanıyorum, bu yüzden aliases
takma adın#
karakteri tam anlamıyla içermiyor . Aksi takdirde #
yazdırma sırasında bu karakterlerin yerini alır .
Not : Değişmez #
işaretli takma adlara ihtiyacınız varsa bunu başka bir karakterle değiştirin .
Yerleşik bir işlev var ... dene
$ __git_aliases
tüm diğer adları listeler :)
$
Tipik Linux terminali istemi belirtmektedir. Bu satırın geri kalanını böyle bir terminale yazın ve vurun ENTER
ve takma adların bir listesi gelir. Hem Linux hem de Windows (git bash) üzerinde çalışır, çünkü git için yerleşiktir . (Muhtemelen git komut satırında kullanıldığında takma adları çözümlemek için dahili olarak kullanılan bir
Git 2.18'den itibaren kullanabilirsiniz git --list-cmds=alias
Git takma adlarını yazdıran başka bir git
takma ad (denir alias
): gitconfig [alias]
bölümünüze aşağıdakileri ekleyin :
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Tam takma ad veren örnek kullanım (takma ad adıyla tam olarak eşleşir: yani, ^foobar$
) ve yalnızca değeri gösterir:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Veya, eşleşen tüm diğer adları ve değerleri gösteren regexp ifadesini verin:
$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only
$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..
Uyarılar: Kabuğun genişlemesini bir glob olarak önlemek için normal ifadeyi alıntılayın, ancak hiçbir dosya kalıba uymuyorsa / eşleşmiyorsa teknik olarak gerekli değildir. Ayrıca: ^
(kalıp başlangıcı) ve $
(kalıp sonu) kullanılamaz; ima edilirler. Kullanmadığınız varsayar git-alias
dangit-extras
.
Ayrıca, açıkça sizin takma adlarınız farklı olacaktır; bunlar benim yapılandırdığım sadece birkaçı. (Belki de onları faydalı bulacaksınız.)