Daftar alias Git


444

Bagaimana cara mencetak daftar alias git saya, yaitu, sesuatu yang analog dengan aliasperintah bash ?



7
@MattDiPasquale - Saya pikir jawaban teratas di bawah berfungsi, mungkin Anda harus menerimanya?
domoarigato

@domoarigato Terima kasih. Saya minta maaf karena tidak menerima jawaban. Saya baru saja melakukannya.
ma11hew28

Mungkin itu adalah kandidat untuk pertanyaan yang bermanfaat, yang telah pergi tanpa jawaban yang diterima paling lama :): P
domoarigato

@domoarigato Hah. Baiklah terima kasih. :-)
ma11hew28

Jawaban:


124

Jawaban ini dibangun berdasarkan jawaban oleh johnny . Ini berlaku jika Anda tidak menggunakan git-aliasdari 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 aliasyang disimpan di ~/.gitconfigfile Anda . Menggunakannya akan mencantumkan semua alias git Anda, dalam format yang hampir sama dengan yang ada di ~/.gitconfigfile. 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 aliasagar tidak terdaftar seperti di atas, tambahkan | grep -v ^'alias 'tepat sebelum tanda kutip ganda. Saya tidak merekomendasikan ini sehingga pengguna tidak lupa bahwa perintahnya aliashanyalah alias dan bukan fitur git.

  • Untuk mengurutkan alias yang tercantum, tambahkan | sorttepat sebelum tanda kutip ganda. Atau, Anda dapat menyimpan alias ~/.gitconfigdiurutkan.

  • Untuk menambahkan alias sebagai alias seluruh sistem, ganti --global(untuk pengguna saat ini) dengan --system(untuk semua pengguna). Ini biasanya masuk dalam /etc/gitconfigfile.


3
Saya suka yang ini karena ini menghilangkan alias.pada awal setiap baris
Brian J

3
Tidak yakin mengapa, tetapi jawaban ini tidak berhasil untuk saya. Saya terus mendapatkan fatal: bad config. Solusi Git-extra tidak bekerja untuk saya: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka

1
@ Ashitaka, coba versi terbatas, mis git config --global alias.alias "! git config --get-regexp ^alias\.". Atau, pastikan git versionbahwa Anda memiliki versi git saat ini.
Acumenus

Ini adalah pekerjaan yang sangat bagus dan menggabungkannya dengan cara yang sangat bermanfaat!
UpAndAdam

Saya percaya Anda dapat menyingkirkan bagian "! Git", yang pada dasarnya saling mengurungkan. Lihat bagian penutup Git Aliases
Daniel Stevens

489
$ git config --get-regexp alias

39
Menjadi bertele-tele, itu seharusnya'^alias\.'
Josh Lee

27
Atau cukup git config -egunakan 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 :)
MatrixFrog

39
git config -ehanya mengedit .git/configfile. Tetapi sebagian besar alias saya didefinisikan di global ~/.gitconfig.
Boldewyn

21
Agar praktis, itu seharusnya git config --global alias.aliases config --get-regexp '^alias\.'"... dan kemudiangit aliases
Derek Greer

6
@DerekGreer Anda melewatkan suatu "tempat
Jake Berger

147

Saya membuat alias git bernama (anehnya) aliasuntuk 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..


Saya telah menambahkan jawaban yang sedikit membangun dari jawaban ini.
Acumenus

1
Saya menyarankan --systemalih-alih --globalkarena sesuatu seperti ini lebih berguna pada level sistem, bukan level pengguna.
ADTC

1
Suka ini. You da You da best
Charles Watson

2
Dan jika Anda ingin menambahkan langsung ke gitconfig Anda harus terlihat seperti ini: alias = config --get-regexp ^alias\\..
marczych

Bagaimana dengangit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson

84

Alternatif lain (murni sesuatu yang menurut saya mudah diingat):

git config --list | grep alias


8
Berbicara tentang mudah diingat, Anda mungkin juga membuat aliasalias sekali dan kemudian melupakan Anda bahkan membuatnya.
Acumenus

3
Anda dapat menggunakan -lsebagai cara pintas yang mudah untuk --listtetapi saya suka ide membuat alias untuk membuat daftar alias.
ADTC

1
Solusi yang bagus, tetapi lebih baik menggunakan grep dengan regex untuk menghasilkan garis yang dimulai dengan alias jika seandainya beberapa konfigurasi entah bagaimana mengandung kata kunci alias:git config --list | grep -E '^alias'
MasterMind

28

Berikut ini berfungsi di Linux, MacOSX dan Windows (dengan msysgit).

Gunakan git la untuk menampilkan alias di .gitconfig

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:

versi dasar: (hitam / putih)

  #.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:

  • semua '=' dicetak dengan warna merah
  • semua '#' dicetak dalam warna hijau

versi lanjutan: (berwarna)

       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 -Rbendera 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.)


Mengapa sihir seperti itu bekerja?

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 submodulesemua 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 ...

  • Menambahkan
  • melakukan
  • komit - ubah
  • atur ulang --hard HEAD
  • Dorong
  • mengambil
  • rebase
  • Periksa
  • cabang
  • show-branch (dalam banyak variasi)
  • shortlog
  • reflog
  • diff (dalam variasi)
  • log (dalam banyak variasi)
  • status
  • menunjukkan
  • catatan
  • ...

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 aaatau git ca "..."di windows,
atau dengan alias bash gaa/ g aaatau 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:

skrip bekerja dengan cmd.exe

BONUS: Jika Anda menggunakan linux atau mac, halaman manual berwarna dapat membantu Anda:

halaman manual berwarna


1
Saya tidak bisa menjalankan ini dengan Windows. Keluarannya kosong untuk misalnyala = "!grep '\t=' ~/.gitconfig | less"
chwi

1
@ Willhelmsen: Apakah Anda mungkin menyalin & menempelkan sesuatu dari daftar di atas? Apakah Anda benar-benar memiliki TABsetiap pendahuluan =? Dengan spasi tidak akan berfungsi. Saya memiliki ruang di jendela saya .gitconfigsendiri, setelah saya menggantinya dengan tabstop tunggal, cmd.exe berperilaku seperti yang diharapkan.
sjas

2
overengineering
Weapon X

tergantung pada seberapa sering Anda menggunakan sesuatu
sjas

16

Menggunakan git vardan memfilter hanya yang dimulai dengan alias:

git var -l | grep -e "^alias"

14

Seperti jawaban lain yang disebutkan, git config -ldaftarkan 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 cuttahu 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!



12

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 tepat

Ketika pengguna mencoba menggunakan --helpopsi ' ' 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'

9

Cari atau tampilkan semua alias

Tambahkan di .gitconfigbawah Anda [alias]:

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

Maka Anda bisa melakukannya

  • git aliases - tampilkan SEMUA alias
  • git aliases commit - hanya alias yang mengandung "commit"

9

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. )


Penjelasan

  1. !git config --get-regexp ^alias\\. mencetak semua baris dari git config yang dimulai dengan alias.
  2. sed -e s/^alias.//menghapus alias.dari garis
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /menggantikan kemunculan pertama spasi dengan \\ $(printf \"\\043\")--\\>(yang dievaluasi menjadi #-->).
  4. column -t -s $(printf \"\\043\")memformat semua baris menjadi tabel kolom dengan jarak yang sama. Karakter $(printf \"\\043\")yang mengevaluasi #digunakan sebagai pemisah.
  5. 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 .


fatal: alias rekursif: alias
Urasquirrel

fatal: config baris 15 buruk dalam file C: / Pengguna / ____ /. gitconfig
Urasquirrel

@Urasquirrel: Di OS mana Anda mengalami masalah? Ini berfungsi untuk saya di git bash di Windows dan di bash di Mac OS X (Apple Git).
Thomas

Itu pasti windows, tapi setahun atau lebih kemudian saya tidak yakin 100%.
Urasquirrel

2

Ada fungsi bawaan ... coba

$ __git_aliases

daftar semua alias :)


3
Bisakah Anda menunjukkan contoh baris perintah tentang bagaimana menggunakan ini, bersama dengan sampel keluaran?
Acumenus

Dibangun untuk apa? Saya tidak dapat menemukan hal semacam ini di msysgit. Di mana tepatnya Anda menemukan ini?
ADTC

2
Baik memanggil ini langsung dari terminal atau sebagai argumen ke git menghasilkan output nilai apa pun. Apa sebenarnya yang ada di dalamnya?
Setuju-askif

4
Bekerja untukku di git bash. $ __git_aliases mengembalikan daftar alias, meskipun tidak menunjukkan ke alias.
jaypb

1
@ADTC baris kode dalam jawaban ini adalah contoh baris perintah. Yang $ menunjukkan prompt terminal linux khas. Ketik sisa baris ini ke terminal seperti itu dan tekan ENTERdan 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.)
Superole

1

Jika Anda tahu nama alias, Anda dapat menggunakan --helpopsi untuk menggambarkannya. Sebagai contoh:

$ git sa --help
`git sa' is aliased to `stash'

$ git a --help
`git a' is aliased to `add'

1

Pada git 2.18 Anda bisa menggunakan git --list-cmds=alias


Mereka hanya mengembalikan alias cmd, bukan kontennya. Apakah ada opsi untuk mendapatkannya?
Carles Alcolea

0

Namun gitalias 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-aliasdari git-extras.

Juga, jelas alias Anda akan berbeda; ini hanya beberapa yang telah saya konfigurasikan. (Mungkin Anda akan menemukan mereka berguna juga.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.