Wyświetl aliasy Git

444

Jak wydrukować listę moich aliasów git, tj. Coś analogicznego do aliaspolecenia bash ?

ma11hew28
źródło
2
Zobacz także: git-alias, z git-dodatków
driftcatcher
7
@MattDiPasquale - Myślę, że najlepsza odpowiedź poniżej działa, może powinieneś ją zaakceptować?
domoarigato,
@domoarigato Dziękuję. Przepraszam, że nie zaakceptowałem odpowiedzi. Właśnie to zrobiłem.
ma11hew28,
Może to być kandydat na przydatne pytanie, które nie było najdłużej zaakceptowanej odpowiedzi :): P
domoarigato
@domoarigato Hah. Dziękuję. :-)
ma11hew28

Odpowiedzi:

124

Ta odpowiedź opiera się na odpowiedź przez Johnny'ego . Ma zastosowanie, jeśli nie używasz git-aliasz git-extras.

W systemie Linux uruchom raz:

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

Spowoduje to utworzenie stałego aliasu git, aliasktóry zostanie zapisany w twoim ~/.gitconfigpliku. Użycie go spowoduje wyświetlenie wszystkich aliasów git w prawie takim samym formacie, jak w ~/.gitconfigpliku. Aby go użyć, wpisz:

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

Obowiązują następujące uwagi:

  • Aby zapobiec wyświetlaniu aliasu aliasjak wyżej, dołącz | grep -v ^'alias 'tuż przed podwójnym cudzysłowiem. Nie polecam tego, aby użytkownicy nie zapomnieli, że polecenie aliasjest aliasem i nie jest cechą git.

  • Aby posortować wymienione aliasy, dołącz je | sorttuż przed podwójnym cudzysłowiem. Alternatywnie możesz ~/.gitconfigposortować aliasy .

  • Aby dodać alias jako alias ogólnosystemowy, zamień --global(dla bieżącego użytkownika) na --system(dla wszystkich użytkowników). Zwykle dzieje się to w /etc/gitconfigpliku.

Acumenus
źródło
3
Podoba mi się ten, ponieważ pozbywa się alias.na początku każdej linii
Brian J
3
Nie jestem pewien, dlaczego, ale ta odpowiedź nie działa dla mnie. Ciągle dostaję fatal: bad config. Rozwiązanie git-extra za działa na mnie chociaż: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka
1
@Ashitaka, wypróbuj ograniczoną wersję, np git config --global alias.alias "! git config --get-regexp ^alias\.". Alternatywnie, upewnij się, git versionże masz aktualną wersję git.
Acumenus
To naprawdę świetna praca, która łączy wszystko w niezwykle użyteczny sposób!
UpAndAdam
Wierzę, że możesz pozbyć się części „! Git”, która zasadniczo się od siebie usuwa. Zobacz końcowy rozdział Git Aliases
Daniel Stevens
489
$ git config --get-regexp alias
William Pursell
źródło
39
Żeby być pedantycznym, powinno to być'^alias\.'
Josh Lee
27
Lub po prostu git config -eużyj oczu, aby znaleźć [alias]sekcję. Ale fani git zawsze wydają się rzucać w trochę skryptów bash lub dopasowywania wyrażeń regularnych w rozwiązywaniu ich problemów, nawet gdy nie jest to konieczne :)
MatrixFrog
39
git config -eedytuje .git/configtylko plik. Ale większość moich aliasów jest zdefiniowanych w globalnym ~/.gitconfig.
Boldewyn
21
Aby być praktycznym, powinno to być git config --global alias.aliases config --get-regexp '^alias\.'"... a potemgit aliases
Derek Greer
6
@DerekGreer, "gdzieś tęsknisz
Jake Berger
147

Stworzyłem alias git o nazwie (dość dziwnie) aliasdo tego właśnie celu ... przydatny od czasu do czasu, jeśli użyjesz wystarczająco aliasingu ...

$ git config --global alias.alias "config --get-regexp ^alias\."

Uwaga: wyrażenie regularne zapewnia, że ​​linia zaczyna się od alias..

Jasio
źródło
Dodałem odpowiedź, która nieco opiera się na tej odpowiedzi.
Acumenus
1
Sugeruję --systemzamiast tego, --globalże coś takiego jest bardziej przydatne na poziomie systemu, a nie na poziomie użytkownika.
ADTC
1
Kocham to. You da You da best
Charles Watson
2
A jeśli chcesz je dodać bezpośrednio do gitconfig musi wyglądać następująco: alias = config --get-regexp ^alias\\..
marczych
Co powiesz nagit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson
84

Kolejna alternatywa (coś, co uważam za łatwe do zapamiętania):

git config --list | grep alias

Rimian
źródło
8
Mówiąc o łatwym do zapamiętania, równie dobrze możesz raz utworzyć aliasalias, a potem zapomnieć, że nawet go stworzyłeś.
Acumenus
3
Możesz użyć go -ljako wygodnego skrótu, --listale podoba mi się pomysł utworzenia aliasu, aby wyświetlić listę aliasów.
ADTC
1
Dobre rozwiązanie, ale lepiej użyć grep z wyrażeniem regularnym, aby uzyskać linie zaczynające się od aliasu, w przypadku gdy niektóre konfiguracje zawierają alias słowa kluczowego:git config --list | grep -E '^alias'
MasterMind
28

Poniższe działa w systemach Linux, MacOSX i Windows (z msysgit).

Użyj git la, aby wyświetlić aliasy w .gitconfig

Czy słyszałem „bash scripting”? ;)

Jeśli chodzi o część „niepotrzebną” w powyższym komentarzu, w zasadzie stworzyłem stronę podręcznika dla moich aliasów. Dlaczego całe zamieszanie? Czy to nie jest całkowita przesada?

Czytaj...

Ustawiłem takie polecenia w moim .gitconfig, rozdzielone jak TAB=TAB :

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

i po prostu zdefiniowałem inny alias do grep TAB= część zdefiniowanych aliasów. (Wszystkie inne opcje nie mają w swojej definicji tabulatorów przed i po „=”, tylko spacje).

Komentarze nie dołączone do aliasu również mają znak TAB===== dołączone, więc są wyświetlane po grepowaniu.

Dla lepszego oglądania przesyłam dane wyjściowe grep na mniej, jak poniżej:

wersja podstawowa: (czarny / biały)

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

Część „ \t=” pasuje TAB=.

Aby mieć jeszcze lepszy przegląd posiadanych aliasów, a ponieważ używam konsoli bash, dane wyjściowe pokolorowałem kolorami zacisków:

  • wszystkie „=” są wydrukowane na czerwono
  • wszystkie „#” są wydrukowane na zielono

wersja zaawansowana: (kolorowa)

       la      =       "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"

Zasadniczo to samo, co powyżej, po prostu dodaje się użycie sed, aby uzyskać kody kolorów na wyjściu.

-RFlaga mniej potrzebne jest, aby uzyskać kolory przedstawione na mniej.

(Niedawno dowiedziałem się, że długie polecenia z paskiem przewijania pod oknem nie są poprawnie wyświetlane na urządzeniach mobilnych: Tekst jest obcięty, a paska przewijania po prostu brakuje. Może tak być w przypadku ostatniego fragmentu kodu tutaj, zachowaj to w uważaj, patrząc na fragmenty kodu tutaj, gdziekolwiek jesteś.)


Po co uruchamiać taką magię?

Mam jakieś pół mili aliasów, dostosowanych do moich potrzeb.
Również niektóre z nich zmieniają się z czasem , więc po tym wszystkim najlepszym pomysłem na posiadanie aktualnej listy jest analiza .gitconfig.

**** krótki **** fragment mojego aliasu .gitconfig:

    #  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

W moich stacjach roboczych z systemem Linux lub Mac istnieją również inne aliasy w .bashrc, takie jak:

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

W ten sposób nie trzeba pisać git help submodule, nie trzeba git h submodule, po prostugh submodule , aby uzyskać pomoc. To tylko niektóre postacie, ale jak często je wpisujesz?

Używam wszystkich poniższych elementów, oczywiście tylko ze skrótami ...

  • Dodaj
  • popełnić
  • commit --amend
  • reset - twarda GŁOWA
  • Pchać
  • sprowadzać
  • rebase
  • sprawdzić
  • Oddział
  • show-branch (w wielu odmianach)
  • krótki dziennik
  • zaloguj się
  • diff (w wariantach)
  • log (w wielu odmianach)
  • status
  • pokazać
  • notatki
  • ...

To było tylko z czubka mojej głowy.

Często muszę używać git bez GUI, ponieważ wiele poleceń git nie jest poprawnie zaimplementowanych w żadnej graficznej nakładce. Ale za każdym razem, gdy używam ich, jest to w większości taki sam sposób.

W części „nie zaimplementowanej”, o której mowa w ostatnim akapicie:
Muszę jeszcze znaleźć coś, co można porównać z tym w GUI:
sba = show-branch --color=always -a --more=10 --no-name- pokaż wszystkie lokalne i zdalne gałęzie, a także ich zatwierdzenia
ccm = "!git reset --soft HEAD~ && git commit"- zmień ostatni komunikat zatwierdzenia

Z prostszego punktu widzenia:
jak często piszesz git add .lub git commit -am "..."? Nie licząc nawet resztę ...
Pierwsze rzeczy do pracy jak git aai git ca "..."w systemie Windows,
lub z aliasów bash gaa/ g aalub gca "..."/ g ca "..."w Linuksie i na Mac ...

Na moje potrzeby rozsądnym rozwiązaniem było dostosowanie takich poleceń git ...
... i dla łatwiejszego użycia pomogłem sobie w przypadku mniej używanych poleceń, więc nie muszę za każdym razem sprawdzać stron podręcznika użytkownika. Polecenia są predefiniowane, a wyszukiwanie ich jest tak proste, jak to możliwe.

To znaczy, w końcu jesteśmy programistami? Zapewnienie, aby rzeczy działały tak, jak potrzebujemy, to nasza praca.

Oto dodatkowy zrzut ekranu, który działa w systemie Windows:

skrypt działający z cmd.exe

BONUS: Jeśli korzystasz z systemu Linux lub Mac, pokolorowane strony podręcznika mogą ci bardzo pomóc:

pokolorowane strony podręcznika

sekundę
źródło
1
Nie mogę uzyskać tego do pracy z systemem Windows. Wyjścia są puste dla np.la = "!grep '\t=' ~/.gitconfig | less"
chwi
1
@Wilhelmsen: Czy może skopiowałeś i wkleiłeś rzeczy z powyższego wpisu? Czy naprawdę masz coś TABpoprzedzającego =? W przypadku spacji nie będzie działać. Sam miałem spacje w moich oknach .gitconfig, kiedy zastąpiłem je jednym tabstopem, cmd.exe zachowuje się zgodnie z oczekiwaniami.
sjas
2
nadinżynieria
Weapon X
zależy od tego, jak często czegoś używasz
sjas
16

Używanie git vari filtrowanie tylko tych, które zaczynają się od alias:

git var -l | grep -e "^alias"
mkobit
źródło
14

Jak wspomniano w innych odpowiedziach, git config -lzawiera wszystkie szczegóły konfiguracji z pliku konfiguracyjnego. Oto częściowy przykład tego wyniku dla mojej konfiguracji:

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

Możemy więc wyodrębnić linie aliasów, używając 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

Możemy uczynić to ładniejszym, po prostu cutusuwając alias.część każdej linii, pozostawiając nam to polecenie:

git config -l | grep alias | cut -c 7-

Które wydruki:

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

Na koniec nie zapomnij dodać tego jako aliasu:

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

Cieszyć się!

Anubian Noob
źródło
13

dla Windowsa:

git config --list | findstr "alias"
176kodowanie
źródło
12

W czerwcu 2018 r. Wspomniałem o „ liście przeglądowej - najczęściej używanych komendach git ” o użyciu Gita 2.18 --list-cmds=alias( zatwierdzenie 3301d36 ), o której Carej donosi w swojej odpowiedzi .

 git --list-cmds=alias

Oprócz tego lub z git config --get-regexp alias, możesz połączyć jego dane wyjściowe z git help, których dane wyjściowe zmienią się w Git 2.14.x / 2.15:

git help co” teraz mówi „ co is aliased to ...”, a nie „ git co is”.

Zobacz commit b3a8076 (12 września 2017) autor: Kaartic Sivaraam ( sivaraam) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 5079cc8 , 25 września 2017)

help: zmień komunikat, aby był bardziej precyzyjny

Gdy użytkownik próbuje użyć --helpopcji „ ” w aliasowanym poleceniu, informacje o aliasie są drukowane, jak pokazano poniżej:

$ git co --help
`git co' is aliased to `checkout'

Nie wydaje się to poprawne, ponieważ użytkownik dokonał aliasu tylko „ co”, a nie „ git co”.
Może to nawet być niepoprawne w przypadkach, w których użytkownik użył aliasu typu „ tgit”.

$ tgit co --help
`git co' is aliased to `checkout'
VonC
źródło
9

Wyszukaj lub pokaż wszystkie aliasy

Dodaj do swojego .gitconfigponiżej [alias]:

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

To możesz zrobić

  • git aliases - pokaż WSZYSTKIE aliasy
  • git aliases commit - tylko aliasy zawierające „zatwierdzenie”
Tom Hale
źródło
9

Używam tego aliasu w mojej globalnej~/.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

w celu uzyskania następującego wyniku

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

( Uwaga: Działa to dla mnie w git bash w systemie Windows . W przypadku innych terminali może być konieczne dostosowanie ucieczki ).


Wyjaśnienie

  1. !git config --get-regexp ^alias\\. wypisuje wszystkie linie z git config, które zaczynają się od alias.
  2. sed -e s/^alias.//usuwa alias.z linii
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /zamienia pierwsze wystąpienie spacji na \\ $(printf \"\\043\")--\\>(który ocenia #-->).
  4. column -t -s $(printf \"\\043\")formatuje wszystkie wiersze w równomiernie rozmieszczonej tabeli kolumn. Znak, $(printf \"\\043\")który jest oceniany, #służy jako separator.
  5. sort -k 1 sortuje wszystkie wiersze na podstawie wartości w pierwszej kolumnie

$ (printf \ "\ 043 \")

To po prostu drukuje znak #(hex 043), który jest używany do rozdzielania kolumn. Używam tego małego hacka, aby sam aliases alias nie zawierał dosłownie #postaci. W przeciwnym razie zastąpiłby te #znaki podczas drukowania. Uwaga : zmień to na inną postać, jeśli potrzebujesz aliasów z literalnymi #znakami.

Tomasz
źródło
fatal: rekurencyjny alias: aliasy
Urasquirrel
fatal: zły wiersz konfiguracji 15 w pliku C: / Users / ____ /. gitconfig
Urasquirrel
@Urasquirrel: Na jakim systemie operacyjnym występują problemy? Działa to dla mnie w git bash na Windowsie i bash na Mac OS X (Apple Git).
Thomas
To zdecydowanie były okna, ale rok lub dłużej później nie jestem w 100% pewien.
Urasquirrel
2

Jest wbudowana funkcja ... spróbuj

$ __git_aliases

wyświetla wszystkie aliasy :)

Vigo
źródło
3
Czy możesz pokazać przykładowy sposób korzystania z tego wiersza poleceń wraz z przykładowymi danymi wyjściowymi?
Acumenus
Wbudowany w co? Nie mogę znaleźć czegoś takiego w msysgit. Gdzie to dokładnie znalazłeś?
ADTC
2
Ani wywołanie tego bezpośrednio z terminala, ani jako argument git nie generuje wartości wyjściowej. Do czego dokładnie to jest wbudowane?
życzliwie ascyficzny
4
Pracował dla mnie w git bash. $ __git_aliases zwraca listę aliasów, chociaż nie pokazuje tego, do czego są one aliasy.
jaypb
1
@ ADTC wiersz kodu w tej odpowiedzi jest przykładem wiersza polecenia. $ Oznacza typową Linux terminala wiersza. Wpisz resztę tego wiersza do takiego terminala, a następnie naciśnij ENTERi wyjdź listę twoich aliasów. Działa zarówno w systemie Linux, jak i Windows (git bash), ponieważ jest wbudowany w git. (Prawdopodobnie jest to funkcja, której git używa wewnętrznie do rozwiązywania aliasów, gdy są one używane w wierszu poleceń.)
Superole
1

Jeśli znasz nazwę aliasu, możesz użyć --helpopcji, aby go opisać. Na przykład:

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

$ git a --help
`git a' is aliased to `add'
cmcginty
źródło
1

Od wersji 2.18 git możesz używać git --list-cmds=alias

carej
źródło
Zwracają tylko alias cmd, a nie jego zawartość. Czy jest taka możliwość?
Carles Alcolea,
0

Jeszcze inny gitalias (wywoływany alias), który wyświetla aliasy git: dodaj następujące polecenie do [alias]sekcji gitconfig :

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

Przykład użycia, podając pełną nazwę aliasu (dokładnie pasuje do nazwy aliasu: tj. ^foobar$), I po prostu pokazuje wartość:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

Lub podaj wyrażenie regularne, które pokazuje wszystkie pasujące aliasy i wartości:

$ 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}..

Ostrzeżenia: zacytuj wyrażenie regularne, aby zapobiec rozszerzeniu powłoki jako globu, chociaż technicznie nie jest to konieczne, jeśli / kiedy żaden plik nie pasuje do wzorca. Ponadto: każde wyrażenie regularne jest w porządku, z wyjątkiem ^(początku wzorca) i $(końca wzorca) nie można użyć; są implikowane. Zakłada się, że nie używasz git-aliasz git-extras.

Oczywiście twoje aliasy będą inne; to tylko kilka, które skonfigurowałem. (Być może też przydadzą ci się.)

Michał
źródło