Jak wydrukować listę moich aliasów git, tj. Coś analogicznego do aliaspolecenia bash ?
Jak wydrukować listę moich aliasów git, tj. Coś analogicznego do aliaspolecenia bash ?
Odpowiedzi:
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.
alias.na początku każdej linii
fatal: bad config. Rozwiązanie git-extra za działa na mnie chociaż: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\.". Alternatywnie, upewnij się, git versionże masz aktualną wersję git.
$ git config --get-regexp alias
'^alias\.'
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 :)
git config -eedytuje .git/configtylko plik. Ale większość moich aliasów jest zdefiniowanych w globalnym ~/.gitconfig.
git config --global alias.aliases config --get-regexp '^alias\.'"... a potemgit aliases
"gdzieś tęsknisz
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..
--systemzamiast tego, --globalże coś takiego jest bardziej przydatne na poziomie systemu, a nie na poziomie użytkownika.
alias = config --get-regexp ^alias\\..
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Kolejna alternatywa (coś, co uważam za łatwe do zapamiętania):
git config --list | grep alias
aliasalias, a potem zapomnieć, że nawet go stworzyłeś.
-ljako wygodnego skrótu, --listale podoba mi się pomysł utworzenia aliasu, aby wyświetlić listę aliasów.
git config --list | grep -E '^alias'
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:
#.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:
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ś.)
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 ...
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:

la = "!grep '\t=' ~/.gitconfig | less"
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.
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ę!
dla Windowsa:
git config --list | findstr "alias"
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 precyzyjnyGdy 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'
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 aliasygit aliases commit - tylko aliasy zawierające „zatwierdzenie”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 ).
!git config --get-regexp ^alias\\. wypisuje wszystkie linie z git config, które zaczynają się od alias.sed -e s/^alias.//usuwa alias.z liniised -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /zamienia pierwsze wystąpienie spacji na \\ $(printf \"\\043\")--\\>(który ocenia #-->).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.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.
Jest wbudowana funkcja ... spróbuj
$ __git_aliases
wyświetla wszystkie aliasy :)
$ 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ń.)
Od wersji 2.18 git możesz używać git --list-cmds=alias
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ę.)