Bagaimana cara mencetak daftar alias git saya, yaitu, sesuatu yang analog dengan alias
perintah bash ?
Bagaimana cara mencetak daftar alias git saya, yaitu, sesuatu yang analog dengan alias
perintah bash ?
Jawaban:
Jawaban ini dibangun berdasarkan jawaban oleh johnny . Ini berlaku jika Anda tidak menggunakan git-alias
dari git-extras
.
Di Linux, jalankan sekali:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
Ini akan membuat alias permanen git bernama alias
yang disimpan di ~/.gitconfig
file Anda . Menggunakannya akan mencantumkan semua alias git Anda, dalam format yang hampir sama dengan yang ada di ~/.gitconfig
file. Untuk menggunakannya, ketik:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
Pertimbangan berikut berlaku:
Untuk mencegah alias alias
agar tidak terdaftar seperti di atas, tambahkan | grep -v ^'alias '
tepat sebelum tanda kutip ganda. Saya tidak merekomendasikan ini sehingga pengguna tidak lupa bahwa perintahnya alias
hanyalah alias dan bukan fitur git.
Untuk mengurutkan alias yang tercantum, tambahkan | sort
tepat sebelum tanda kutip ganda. Atau, Anda dapat menyimpan alias ~/.gitconfig
diurutkan.
Untuk menambahkan alias sebagai alias seluruh sistem, ganti --global
(untuk pengguna saat ini) dengan --system
(untuk semua pengguna). Ini biasanya masuk dalam /etc/gitconfig
file.
alias.
pada awal setiap baris
fatal: bad config
. Solusi Git-extra tidak bekerja untuk saya: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\."
. Atau, pastikan git version
bahwa Anda memiliki versi git saat ini.
$ git config --get-regexp alias
'^alias\.'
git config -e
gunakan mata Anda untuk menemukan [alias]
bagian itu. Tapi penggemar git sepertinya selalu menggunakan sedikit bash scripting atau pencocokan ekspresi reguler untuk menyelesaikan masalah mereka, bahkan ketika itu tidak perlu :)
git config -e
hanya mengedit .git/config
file. Tetapi sebagian besar alias saya didefinisikan di global ~/.gitconfig
.
git config --global alias.aliases config --get-regexp '^alias\.'"
... dan kemudiangit aliases
"
tempat
Saya membuat alias git bernama (anehnya) alias
untuk tujuan ini ... berguna dari waktu ke waktu jika Anda menggunakan aliasing cukup ...
$ git config --global alias.alias "config --get-regexp ^alias\."
Catatan, regex memastikan garis dimulai dengan alias.
.
--system
alih-alih --global
karena sesuatu seperti ini lebih berguna pada level sistem, bukan level pengguna.
alias = config --get-regexp ^alias\\.
.
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Alternatif lain (murni sesuatu yang menurut saya mudah diingat):
git config --list | grep alias
alias
alias sekali dan kemudian melupakan Anda bahkan membuatnya.
-l
sebagai cara pintas yang mudah untuk --list
tetapi saya suka ide membuat alias untuk membuat daftar alias.
git config --list | grep -E '^alias'
Apakah saya mendengar 'bash scripting'? ;)
Tentang bagian 'tidak diperlukan' di komentar di atas, saya pada dasarnya membuat halaman manual seperti ikhtisar untuk alias saya. Kenapa harus repot? Bukankah itu sama sekali berlebihan?
Baca terus ...
Saya telah mengatur perintah seperti ini di .gitconfig saya, dipisahkan seperti TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
dan cukup mendefinisikan alias lain untuk menangkap TAB=bagian alias yang didefinisikan. (Semua opsi lain tidak memiliki tab sebelum dan sesudah '=' dalam definisi mereka, hanya spasi.)
Komentar yang tidak ditambahkan ke alias juga telah TAB=====ditambahkan, sehingga ditampilkan setelah menerima.
Untuk tampilan yang lebih baik, saya memipipkan keluaran grep menjadi lebih sedikit, seperti ini:
#.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"
Bagian ' \t=
' cocok TAB=.
Untuk memiliki gambaran yang lebih baik tentang alias apa yang saya miliki, dan karena saya menggunakan konsol bash, saya mewarnai keluaran dengan warna terminal:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
Pada dasarnya sama seperti di atas, hanya penggunaan sed ditambahkan untuk mendapatkan kode warna ke dalam output.
The -R
bendera kurang diperlukan untuk mendapatkan warna yang ditampilkan dalam waktu kurang.
(Baru-baru ini saya tahu, bahwa perintah panjang dengan bilah gulir di bawah jendela mereka tidak ditampilkan dengan benar di perangkat seluler: Teks terputus dan bilah gulir hilang begitu saja. Itu mungkin terjadi dengan cuplikan kode terakhir di sini, simpan di keberatan ketika melihat cuplikan kode di sini saat bepergian.)
Saya memiliki alias setengah mil, disesuaikan dengan kebutuhan saya.
Juga beberapa dari mereka berubah dari waktu ke waktu , jadi setelah semua ide terbaik untuk memiliki daftar terbaru di parsing the .gitconfig.
Kutipan **** pendek **** dari alias .gitconfig saya:
# 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
Di linux atau mac workstation saya juga ada alias di .bashrc, semacam seperti:
#.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
Dengan begitu tidak perlu mengetik git help submodule
, tidak perlu git h submodule
, hanya gh submodule
semua yang dibutuhkan untuk mendapatkan bantuan. Ini hanya beberapa karakter, tetapi seberapa sering Anda mengetiknya?
Saya menggunakan semua yang berikut ini, tentu saja hanya dengan pintasan ...
Ini hanya dari atas kepalaku.
Saya sering harus menggunakan git tanpa gui, karena banyak perintah git tidak diimplementasikan dengan benar di salah satu antarmuka grafis. Tetapi setiap kali saya menggunakannya, sebagian besar dengan cara yang sama.
Pada bagian 'tidak diterapkan' yang disebutkan dalam paragraf terakhir:
Saya belum menemukan sesuatu yang sebanding dengan ini di GUI:
sba = show-branch --color=always -a --more=10 --no-name
- tampilkan semua cabang lokal dan jarak jauh serta komitmen yang ada di dalamnya
ccm = "!git reset --soft HEAD~ && git commit"
- ubah pesan komit terakhir
Dari sudut pandang yang lebih sederhana:
Seberapa sering Anda mengetik git add .
atau git commit -am "..."
? Tidak termasuk yang lainnya ...
Mendapatkan sesuatu untuk bekerja seperti git aa
atau git ca "..."
di windows,
atau dengan alias bash gaa
/ g aa
atau gca "..."
/ g ca "..."
di linux dan di mac ...
Untuk kebutuhan saya, itu tampaknya hal yang cerdas untuk dilakukan, untuk menyesuaikan perintah git seperti ini ...
... dan untuk penggunaan yang lebih mudah, saya hanya membantu diri sendiri untuk perintah yang lebih sedikit digunakan, jadi saya tidak perlu berkonsultasi dengan halaman manual setiap kali. Perintah sudah ditentukan sebelumnya dan mencari mereka semudah mungkin.
Maksudku, kita semua programmer? Membuat segala sesuatunya berjalan seperti kita membutuhkannya adalah pekerjaan kita.
Ini screenshot tambahan, ini berfungsi di Windows:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
setiap pendahuluan =
? Dengan spasi tidak akan berfungsi. Saya memiliki ruang di jendela saya .gitconfig
sendiri, setelah saya menggantinya dengan tabstop tunggal, cmd.exe berperilaku seperti yang diharapkan.
Seperti jawaban lain yang disebutkan, git config -l
daftarkan semua detail konfigurasi Anda dari file konfigurasi Anda. Berikut ini sebagian contoh dari output itu untuk konfigurasi saya:
...
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
...
Jadi kita dapat menghapus garis alias, menggunakan git config -l | grep alias
:
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
Kita dapat membuat ini lebih cantik dengan hanya memberi cut
tahu alias.
bagian dari setiap baris, meninggalkan kita dengan perintah ini:
git config -l | grep alias | cut -c 7-
Yang mencetak:
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
Terakhir, jangan lupa menambahkan ini sebagai alias:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Nikmati!
Saya sebutkan pada Juni 2018 dengan " daftar ikhtisar - perintah git yang paling banyak digunakan " the Git 2.18 "use --list-cmds=alias
( commit 3301d36 )", itulah yang dilaporkan carej dalam jawabannya .
git --list-cmds=alias
Selain itu atau git config --get-regexp alias
, Anda dapat menggabungkan outputnya dengan git help
, yang outputnya akan berubah dengan Git 2.14.x / 2.15:
"
git help co
" sekarang mengatakan "co is aliased to ...
", bukan "git co is
".
Lihat komit b3a8076 (12 Sep 2017) oleh Kaartic Sivaraam ( sivaraam
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 5079cc8 , 25 Sep 2017)
help
: ubah pesan menjadi lebih tepatKetika pengguna mencoba menggunakan
--help
opsi ' ' pada informasi perintah alias tentang alias dicetak seperti yang ditunjukkan di bawah ini:
$ git co --help
`git co' is aliased to `checkout'
Ini tampaknya tidak benar karena pengguna hanya alias '
co
' dan tidak 'git co
'.
Ini bahkan mungkin salah dalam kasus-kasus di mana pengguna telah menggunakan alias seperti 'tgit
'.
$ tgit co --help
`git co' is aliased to `checkout'
Tambahkan di .gitconfig
bawah Anda [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Maka Anda bisa melakukannya
git aliases
- tampilkan SEMUA aliasgit aliases commit
- hanya alias yang mengandung "commit"Saya menggunakan alias ini di global saya~/.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
untuk menghasilkan output berikut
$ 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
... --> ...
( Catatan: Ini berfungsi untuk saya di git bash pada Windows . Untuk terminal lain Anda mungkin perlu menyesuaikan pelolosan. )
!git config --get-regexp ^alias\\.
mencetak semua baris dari git config yang dimulai dengan alias.
sed -e s/^alias.//
menghapus alias.
dari garissed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
menggantikan kemunculan pertama spasi dengan \\ $(printf \"\\043\")--\\>
(yang dievaluasi menjadi #-->
).column -t -s $(printf \"\\043\")
memformat semua baris menjadi tabel kolom dengan jarak yang sama. Karakter $(printf \"\\043\")
yang mengevaluasi #
digunakan sebagai pemisah.sort -k 1
mengurutkan semua baris berdasarkan nilai di kolom pertama$ (printf \ "\ 043 \")
Ini hanya mencetak karakter #
(hex 043) yang digunakan untuk pemisahan kolom. Saya menggunakan hack kecil ini sehingga aliases
alias itu sendiri tidak mengandung #
karakter. Kalau tidak, itu akan menggantikan #
karakter - karakter itu saat mencetak.
Catatan : Ubah ini ke karakter lain jika Anda membutuhkan alias dengan #
tanda literal .
Ada fungsi bawaan ... coba
$ __git_aliases
daftar semua alias :)
$
menunjukkan prompt terminal linux khas. Ketik sisa baris ini ke terminal seperti itu dan tekan ENTER
dan keluar datang daftar alias Anda. Berfungsi pada Linux dan Windows (git bash), karena ini built-in untuk git. (Mungkin fungsi yang git gunakan secara internal untuk menyelesaikan alias ketika mereka digunakan pada baris perintah.)
Pada git 2.18 Anda bisa menggunakan git --list-cmds=alias
Namun git
alias lain (dipanggil alias
) yang mencetak alias git: tambahkan berikut ini ke [alias]
bagian gitconfig Anda :
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Contoh penggunaan, memberikan nama alias lengkap (sama persis dengan nama alias: yaitu, ^foobar$
), dan cukup menunjukkan nilainya:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Atau, berikan regexp, yang menampilkan semua alias & nilai yang cocok:
$ 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}..
Peringatan: kutip regexp untuk mencegah ekspansi shell sebagai gumpalan, meskipun secara teknis tidak diperlukan jika / ketika tidak ada file yang cocok dengan polanya. Juga: regexp apa pun baik-baik saja, kecuali ^
(awal pola) dan $
(akhir pola) tidak dapat digunakan; mereka tersirat. Asumsikan Anda tidak menggunakan git-alias
dari git-extras
.
Juga, jelas alias Anda akan berbeda; ini hanya beberapa yang telah saya konfigurasikan. (Mungkin Anda akan menemukan mereka berguna juga.)