Jak wydrukować listę moich aliasów git, tj. Coś analogicznego do alias
polecenia bash ?
Jak wydrukować listę moich aliasów git, tj. Coś analogicznego do alias
polecenia bash ?
Odpowiedzi:
Ta odpowiedź opiera się na odpowiedź przez Johnny'ego . Ma zastosowanie, jeśli nie używasz git-alias
z 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, alias
który zostanie zapisany w twoim ~/.gitconfig
pliku. Użycie go spowoduje wyświetlenie wszystkich aliasów git w prawie takim samym formacie, jak w ~/.gitconfig
pliku. 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 alias
jak wyżej, dołącz | grep -v ^'alias '
tuż przed podwójnym cudzysłowiem. Nie polecam tego, aby użytkownicy nie zapomnieli, że polecenie alias
jest aliasem i nie jest cechą git.
Aby posortować wymienione aliasy, dołącz je | sort
tuż przed podwójnym cudzysłowiem. Alternatywnie możesz ~/.gitconfig
posortować 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/gitconfig
pliku.
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 -e
uż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 -e
edytuje .git/config
tylko 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) alias
do 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.
.
--system
zamiast 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
alias
alias, a potem zapomnieć, że nawet go stworzyłeś.
-l
jako wygodnego skrótu, --list
ale 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.
-R
Flaga 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 aa
i git ca "..."
w systemie Windows,
lub z aliasów bash gaa
/ g aa
lub 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"
TAB
poprzedzają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 -l
zawiera 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 cut
usuwają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ć
--help
opcji „ ” 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 .gitconfig
poniż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 ENTER
i 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 git
alias (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-alias
z git-extras
.
Oczywiście twoje aliasy będą inne; to tylko kilka, które skonfigurowałem. (Być może też przydadzą ci się.)