Список псевдонимов Git


444

Как напечатать список моих псевдонимов git, то есть что-то аналогичное команде bash alias?


2
Смотрите также: git-alias, из git-extras
driftcatcher

7
@ MattDiPasquale - я думаю, что верхний ответ ниже работает, может быть, вы должны принять его?
Домоаригато

@domoarigato Спасибо. Я извиняюсь за то, что не принял ответ. Я просто так и сделал.
ma11hew28

Это может быть кандидат на полезный вопрос, который дольше всего
остался

@domoarigato Ха. Что ж, спасибо тебе. :-)
ma11hew28

Ответы:


125

Этот ответ основывается на ответ по Джонни . Это применимо, если вы не используете 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файле.


3
Мне нравится этот, потому что он избавляется от alias.в начале каждой строки
Брайан J

3
Не уверен, почему, но этот ответ не работает для меня. Я продолжаю получать fatal: bad config. Решение Git-extra работает для меня, хотя: github.com/tj/git-extras/blob/master/bin/git-alias
Ашитака

1
@Ashitaka, попробуйте ограниченную версию, например git config --global alias.alias "! git config --get-regexp ^alias\.". В качестве альтернативы, убедитесь, git versionчто у вас есть текущая версия Git.
Acumenus

Это действительно отличная работа, и все это складывается в очень удобной манере!
UpAndAdam

Я верю, что вы можете избавиться от части "! Git", которая в основном отменяет друг друга. Смотрите заключительный раздел Git Aliases
Даниэль Стивенс

489
$ git config - псевдоним get-regexp

39
Чтобы быть педантичным, это должно быть'^alias\.'
Джош Ли

27
Или просто git config -eи затем используйте свои глаза, чтобы найти [alias]раздел. Но фанаты git всегда, кажется, добавляют немного сценариев bash или сопоставления регулярных выражений для решения своих проблем, даже когда в этом нет необходимости :)
MatrixFrog

39
git config -eредактирует .git/configтолько файл. Но большинство моих псевдонимов определены в глобальном ~/.gitconfig.
Болдевин

21
Чтобы быть практичным, это должно быть git config --global alias.aliases config --get-regexp '^alias\.'"... а потомgit aliases
Дерек Грир

6
@DerekGreer вы пропустили "где-то
Джейк Бергер

147

Я создал псевдоним git (как ни странно) aliasименно для этой цели ... время от времени, если вы используете псевдонимы достаточно ...

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

Обратите внимание, регулярное выражение гарантирует, что строка начинается с alias..


Я добавил ответ, который немного основывается на этом ответе.
Acumenus

1
Я предлагаю --systemвместо того, чтобы --globalчто-то подобное, было бы более полезным на уровне системы, а не на уровне пользователя.
ADTC

1
Люблю это. Ты да Ты да лучший
Чарльз Уотсон

2
И если вы хотите , чтобы добавить его прямо в gitconfig он должен выглядеть следующим образом : alias = config --get-regexp ^alias\\..
Marczych

Как насчетgit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Кит Робертсон

84

Другая альтернатива (чисто то, что мне легко запомнить):

git config --list | grep alias


8
Говоря о простоте запоминания, вы могли бы также создать aliasпсевдоним один раз, а потом забыть, что даже создали его.
Acumenus

3
Вы можете использовать -lв качестве удобного ярлыка для, --listно мне нравится идея создания псевдонима для перечисления псевдонимов.
ADTC

1
Хорошее решение, но лучше использовать grep с регулярным выражением для получения строк, начинающихся с псевдонима, если некоторые конфигурации каким-то образом содержат псевдоним ключевого слова:git config --list | grep -E '^alias'
MasterMind

28

Следующее работает под Linux, MacOSX и Windows (с msysgit).

Используйте git la для отображения псевдонимов в .gitconfig

Я слышал «скрипты 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все, что нужно, чтобы получить помощь. Это всего лишь несколько символов, но как часто вы их набираете?

Я использую все следующее, конечно, только с ярлыками ...

  • Добавить
  • совершить
  • совершить --amend
  • сбросить --hard HEAD
  • От себя
  • получать
  • перебазироваться
  • проверять, выписываться
  • филиал
  • шоу-ветка (во многих вариациях)
  • shortlog
  • reflog
  • diff (в вариациях)
  • журнал (во многих вариациях)
  • положение дел
  • Показать
  • ноты
  • ...

Это было только от макушки моей головы.

Мне часто приходится использовать 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:

скрипт работающий с cmd.exe

БОНУС: Если вы используете Linux или Mac, цветные справочные страницы могут вам немного помочь:

раскрашенные страницы руководства


1
Я не могу заставить это работать с Windows. Выходы не заполнены, например,la = "!grep '\t=' ~/.gitconfig | less"
chwi

1
@Wilhelmsen: Возможно, вы копировали и вставляли вещи из списка выше? У вас действительно есть TABпредшественник каждый =? С пробелами это не сработает. У меня в окнах были пробелы .gitconfig, и как только я заменил их на одну вкладку, cmd.exe ведет себя как ожидалось.
sjas

2
перегрузка
оружие X

зависит от того, как часто вы используете что-то
sjas

16

Использование git varи фильтрация только тех, которые начинаются с alias:

git var -l | grep -e "^alias"

14

Как уже упоминалось в других ответах, 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-"

Наслаждайтесь!



12

Я упомянул в июне 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'

9

Поиск или показать все псевдонимы

Добавить в свой .gitconfigпод [alias]:

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

Тогда вы можете сделать

  • git aliases - показать ВСЕ псевдонимы
  • git aliases commit - только псевдонимы, содержащие "commit"

9

Я использую этот псевдоним в моем глобальном~/.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 . Для других терминалов вам может понадобиться адаптировать экранирование. )


объяснение

  1. !git config --get-regexp ^alias\\. выводит все строки из git config, которые начинаются с alias.
  2. sed -e s/^alias.//снимает alias.с линии
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /заменяет первое вхождение пространства на \\ $(printf \"\\043\")--\\>(которое оценивается как #-->).
  4. column -t -s $(printf \"\\043\")форматирует все строки в равномерно распределенную таблицу столбцов. Символ, $(printf \"\\043\")который оценивает, #используется в качестве разделителя.
  5. sort -k 1 сортирует все строки по значению в первом столбце

$ (printf \ "\ 043 \")

Это просто печатает символ #(гекс 043), который используется для разделения столбцов. Я использую этот небольшой хак, поэтому aliases псевдоним сам по себе не содержит буквально #персонажа. В противном случае он заменит эти #символы при печати. Примечание . Измените его на другой символ, если вам нужны псевдонимы с буквенными #знаками.


Роковое: рекурсивный псевдоним: псевдонимы
Urasquirrel

фатально: неверная строка конфигурации 15 в файле C: / Users / ____ /. gitconfig
Urasquirrel

@Urasquirrel: На какой ОС вы испытываете проблемы? Это работает для меня в git bash в Windows и в bash в Mac OS X (Apple Git).
Томас

Это были определенно окна, но через год или более я не уверен на 100%.
Urasquirrel

2

Есть встроенная функция ... попробуйте

$ __git_aliases

перечисляет все псевдонимы :)


3
Можете ли вы показать пример командной строки, как использовать это, наряду с примером вывода?
Acumenus

Встроенный к чему? Я не могу найти ничего подобного в msysgit. Где именно ты это нашел?
ADTC

2
Ни вызов этого напрямую из терминала, ни в качестве аргумента git не приводит к выводу значения. Во что конкретно это встроено?
-доброму асцифному

4
Работал для меня в Git Bash. $ __git_aliases возвращает список псевдонимов, хотя он не показывает, к чему они привязаны.
Jaypb

1
@ADTC строка кода в этом ответе является примером командной строки. $ Обозначает типичный Линукс строку терминала. Введите остальную часть этой строки в такой терминал и нажмите ENTERи получите список ваших псевдонимов. Работает как на Linux, так и на Windows (git bash), потому что он встроен в git. (Вероятно, это функция, которую git использует для разрешения псевдонимов, когда они используются в командной строке.)
Superole

1

Если вы знаете имя псевдонима, вы можете использовать --helpопцию для его описания. Например:

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

$ git a --help
`git a' is aliased to `add'

1

Начиная с Git 2.18 вы можете использовать git --list-cmds=alias


Они только возвращают псевдоним cmd, а не его содержимое. Есть ли возможность получить это?
Карлес

0

Еще один 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 .

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.