Как напечатать список моих псевдонимов 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
.
Кроме того, очевидно, что ваши псевдонимы будут другими; это лишь некоторые из них, которые я настроил. (Возможно, вы тоже найдете их полезными.)