Как напечатать список моих псевдонимов git, то есть что-то аналогичное команде bash alias?
Как напечатать список моих псевдонимов git, то есть что-то аналогичное команде bash alias?
Ответы:
Этот ответ основывается на ответ по Джонни . Это применимо, если вы не используете git-aliasот git-extras.
В Linux запустите один раз:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
Это создаст постоянный псевдоним git, aliasкоторый будет сохранен в вашем ~/.gitconfigфайле. Используя его, вы получите список всех ваших псевдонимов git, примерно в том же формате, что и в ~/.gitconfigфайле. Чтобы использовать его, введите:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
Применяются следующие соображения:
Чтобы псевдоним не появился в aliasсписке, как указано выше, добавляйте его | grep -v ^'alias 'перед закрывающей двойной кавычкой. Я не рекомендую это, так что пользователи не забывают, что команда aliasявляется псевдонимом и не является функцией git.
Чтобы отсортировать псевдонимы в списке, добавьте их | sortперед закрывающей двойной кавычкой. Кроме того, вы можете сохранить псевдонимы в ~/.gitconfigотсортированном виде.
Чтобы добавить псевдоним как общесистемный псевдоним, замените --global(для текущего пользователя) на --system(для всех пользователей). Это обычно идет в /etc/gitconfigфайле.
alias.в начале каждой строки
fatal: bad config. Решение Git-extra работает для меня, хотя: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\.". В качестве альтернативы, убедитесь, git versionчто у вас есть текущая версия Git.
$ git config - псевдоним get-regexp
'^alias\.'
git config -eи затем используйте свои глаза, чтобы найти [alias]раздел. Но фанаты git всегда, кажется, добавляют немного сценариев bash или сопоставления регулярных выражений для решения своих проблем, даже когда в этом нет необходимости :)
git config -eредактирует .git/configтолько файл. Но большинство моих псевдонимов определены в глобальном ~/.gitconfig.
git config --global alias.aliases config --get-regexp '^alias\.'"... а потомgit aliases
"где-то
Я создал псевдоним git (как ни странно) aliasименно для этой цели ... время от времени, если вы используете псевдонимы достаточно ...
$ git config --global alias.alias "config --get-regexp ^alias\."
Обратите внимание, регулярное выражение гарантирует, что строка начинается с alias..
--systemвместо того, чтобы --globalчто-то подобное, было бы более полезным на уровне системы, а не на уровне пользователя.
alias = config --get-regexp ^alias\\..
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Другая альтернатива (чисто то, что мне легко запомнить):
git config --list | grep alias
aliasпсевдоним один раз, а потом забыть, что даже создали его.
-lв качестве удобного ярлыка для, --listно мне нравится идея создания псевдонима для перечисления псевдонимов.
git config --list | grep -E '^alias'
Я слышал «скрипты bash»? ;)
Что касается «ненужной» части в комментарии выше, я в основном создал справочную страницу, похожую на обзор моих псевдонимов. Почему вся эта суета? Разве это не полное излишество?
Читать дальше...
Я установил такие команды в моем .gitconfig, разделив их так TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
и просто определил другой псевдоним, чтобы получить TAB=часть определенных псевдонимов. (Все остальные параметры не имеют вкладок до и после '=' в своем определении, только пробелы.)
Комментарии, не добавленные к псевдониму, также имеют TAB=====добавление, поэтому они отображаются после поиска.
Для лучшего просмотра я добавляю вывод grep в меньше, например так:
#.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"
Часть ' \t=' совпадает TAB=.
Чтобы получить еще лучший обзор того, какие псевдонимы у меня есть, и, поскольку я использую консоль bash, я покрасил вывод в цвета терминала:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
В основном так же, как и выше, добавлено только использование sed для получения цветовых кодов на выходе.
-RФлаг менее необходим , чтобы цвет показан ниже.
(Недавно я обнаружил, что длинные команды с полосой прокрутки под их окном не отображаются правильно на мобильных устройствах: их текст обрезан, а полоса прокрутки просто отсутствует. Это может быть в случае с последним фрагментом кода, сохраните это в будьте осторожны при просмотре фрагментов кода здесь, на ходу.)
У меня около полумили псевдонимов, с учетом моих потребностей.
Кроме того, некоторые из них со временем меняются , так что лучше всего иметь актуальный список под рукой, разбирая .gitconfig.
Короткая **** выдержка из моих псевдонимов .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
На моих рабочих станциях linux или mac также есть дополнительные псевдонимы в .bashrc, вроде как:
#.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
Таким образом, нет необходимости печатать git help submodule, не нужно git h submodule, просто gh submoduleвсе, что нужно, чтобы получить помощь. Это всего лишь несколько символов, но как часто вы их набираете?
Я использую все следующее, конечно, только с ярлыками ...
Это было только от макушки моей головы.
Мне часто приходится использовать git без графического интерфейса, так как многие команды git не реализованы должным образом ни в одном из графических интерфейсов. Но каждый раз, когда я использую их, это происходит в основном одинаково.
В части «не реализовано», упомянутой в последнем абзаце:
мне еще предстоит найти что-то, что можно сравнить с этим в графическом интерфейсе:
sba = show-branch --color=always -a --more=10 --no-name- показать все локальные и удаленные ветви, а также
ccm = "!git reset --soft HEAD~ && git commit"зафиксированные в них коммиты - изменить сообщение последнего коммита
С более простой точки зрения:
как часто вы печатаете git add .или git commit -am "..."? Не считая даже всего остального ...
Как заставить работать так, как git aaили git ca "..."в Windows,
или с псевдонимами bash gaa/ g aaили gca "..."/ g ca "..."в Linux и на Mac ...
Для моих нужд казалось разумным сделать такие команды git ...
... и для более легкого использования я просто помогал себе для менее используемых команд, поэтому мне не нужно каждый раз просматривать страницы руководства. Команды предопределены, и поиск их максимально прост.
Я имею в виду, мы ведь программисты? Заставить вещи работать так, как нам нужно, - это наша работа.
Вот дополнительный скриншот, это работает в Windows:

la = "!grep '\t=' ~/.gitconfig | less"
TABпредшественник каждый =? С пробелами это не сработает. У меня в окнах были пробелы .gitconfig, и как только я заменил их на одну вкладку, cmd.exe ведет себя как ожидалось.
Как уже упоминалось в других ответах, git config -lперечисляются все ваши данные конфигурации из вашего файла конфигурации. Вот частичный пример этого вывода для моей конфигурации:
...
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
...
Таким образом, мы можем вычеркнуть строки псевдонимов, используя 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
Мы можем сделать это красивее, просто cutвыделив alias.часть каждой строки, оставив нас с этой командой:
git config -l | grep alias | cut -c 7-
Какие отпечатки:
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
Наконец, не забудьте добавить это как псевдоним:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Наслаждайтесь!
Я упомянул в июне 2018 года « обзорный список - наиболее часто используемые команды git, которые использует Git 2.18 --list-cmds=alias( commit 3301d36 )», о которых Carej сообщает в своем ответе .
git --list-cmds=alias
В дополнение к тому или другому git config --get-regexp alias, вы можете объединить его вывод с тем git help, чей вывод изменится с Git 2.14.x / 2.15:
«
git help coтеперь говорит«co is aliased to ...», а не«git co is».
Смотрите коммит b3a8076 (12 сентября 2017 г.) от Kaartic Sivaraam ( sivaraam) .
(Слиты Junio C Hamano - gitster- в фиксации 5079cc8 , 25 Sep 2017)
help: измените сообщение, чтобы быть более точнымКогда пользователь пытается использовать параметр '
--help' для команды с псевдонимом, выводится информация о псевдониме, как показано ниже:
$ git co --help
`git co' is aliased to `checkout'
Это кажется неправильным, поскольку пользователь имеет псевдонимы только '
co' и не 'git co'.
Это может быть даже неверно в тех случаях, когда пользователь использовал псевдоним типа 'tgit'.
$ tgit co --help
`git co' is aliased to `checkout'
Добавить в свой .gitconfigпод [alias]:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Тогда вы можете сделать
git aliases - показать ВСЕ псевдонимыgit aliases commit - только псевдонимы, содержащие "commit"Я использую этот псевдоним в моем глобальном~/.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
произвести следующий вывод
$ 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
... --> ...
( Примечание: это работает для меня в git bash на Windows . Для других терминалов вам может понадобиться адаптировать экранирование. )
!git config --get-regexp ^alias\\. выводит все строки из git config, которые начинаются с alias.sed -e s/^alias.//снимает alias.с линииsed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /заменяет первое вхождение пространства на \\ $(printf \"\\043\")--\\>(которое оценивается как #-->).column -t -s $(printf \"\\043\")форматирует все строки в равномерно распределенную таблицу столбцов. Символ, $(printf \"\\043\")который оценивает, #используется в качестве разделителя.sort -k 1 сортирует все строки по значению в первом столбце$ (printf \ "\ 043 \")
Это просто печатает символ #(гекс 043), который используется для разделения столбцов. Я использую этот небольшой хак, поэтому aliases псевдоним сам по себе не содержит буквально #персонажа. В противном случае он заменит эти #символы при печати.
Примечание . Измените его на другой символ, если вам нужны псевдонимы с буквенными #знаками.
Есть встроенная функция ... попробуйте
$ __git_aliases
перечисляет все псевдонимы :)
$ Обозначает типичный Линукс строку терминала. Введите остальную часть этой строки в такой терминал и нажмите ENTERи получите список ваших псевдонимов. Работает как на Linux, так и на Windows (git bash), потому что он встроен в git. (Вероятно, это функция, которую git использует для разрешения псевдонимов, когда они используются в командной строке.)
Еще один gitпсевдоним (называется alias), который печатает псевдонимы git: добавьте следующее в ваш [alias]раздел gitconfig :
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Пример использования, дающий полное имя псевдонима (точно совпадает с именем псевдонима: т.е. ^foobar$), и просто показывает значение:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Или, дайте регулярное выражение, которое показывает все совпадающие псевдонимы и значения:
$ 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}..
Предостережения: заключите в кавычки регулярное выражение, чтобы предотвратить расширение оболочки в виде глобуса, хотя это не является технически необходимым, если / когда никакие файлы не соответствуют шаблону. Кроме того: любое регулярное выражение в порядке, за исключением того, что ^(начало шаблона) и $(конец шаблона) нельзя использовать; они подразумеваются. Предполагается, что вы не используете git-aliasизgit-extras .
Кроме того, очевидно, что ваши псевдонимы будут другими; это лишь некоторые из них, которые я настроил. (Возможно, вы тоже найдете их полезными.)