Перерахуйте псевдоніми Git


444

Як надрукувати список моїх псевдонімів git, тобто щось аналогічне aliasкоманді bash ?


2
Дивіться також: git-alias, від git-extras
driftcatcher

7
@MattDiPasquale - Я думаю, що відповідь внизу працює, можливо, ви повинні це прийняти?
domoarigato

@domoarigato Дякую Вибачте за те, що не прийняв відповідь. Я просто так зробив.
ma11hew28

Це може бути кандидатом на корисне питання, яке найдовше пройшло без прийнятої відповіді :): P
domoarigato

@domoarigato Hah. Ну, дякую. :-)
ma11hew28

Відповіді:


124

Ця відповідь ґрунтується на відповідь по Джонні . Це відноситься , якщо ви не використовуєте 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.початку на кожному рядку
Брайана Дж.

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

1
@Ashitaka, спробуйте обмежену версію, наприклад git config --global alias.alias "! git config --get-regexp ^alias\.". Крім того, переконайтеся, git versionщо у вас є поточна версія git.
Акумен

Це дійсно чудова робота і поєднує все це надзвичайно корисно!
UpAndAdam

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

489
$ git config - псевдонімgetget-regexp

39
Щоб бути педантичним, це повинно бути'^alias\.'
Джош Лі

27
Або просто, git config -eа потім скористайтеся очима, щоб знайти [alias]розділ. Але шанувальники git завжди, здається, кидають трохи баш сценаріїв або відповідності регулярних виразів, щоб вирішити свої проблеми, навіть коли це не потрібно :)
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..


Я додав відповідь, яка лежить на цій відповіді.
Акумен

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псевдонім один раз, а потім забути, що навіть створили його.
Акумен

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

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

28

Далі працює під Linux, MacOSX та Windows (з msysgit).

Використовуйте git la для показу псевдонімів у .gitconfig

Чи чув я "баш сценаріїв"? ;)

Щодо частини "не потрібна" у коментарі вище, я в основному створив таку сторінку, як огляд для своїх псевдонімів. Чому вся суєта? Хіба це не повний перебір?

Читати далі ...

Я встановив такі команди в моєму .gitconfig, розділені як TAB=TAB:

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

і просто визначили інший псевдонім, щоб зіставити TAB=частину визначених псевдонімів. (Усі інші параметри не містять вкладок до та після їх значення "=", просто пробіли.)

Коментарі, не додані до псевдоніму, також TAB=====додаються, тому вони відображаються після зібрання.

Для кращого перегляду я перекладаю греп-вихід на менше, як це:

основна версія: (чорно-біла)

  #.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 без gui, оскільки багато команд 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 "..."в вікнах,
або з псевдонімами Баша gaa/ g aaабо gca "..."/ g ca "..."в Linux і на Мак ...

Для моїх потреб це здавалося розумним, щоб налаштувати такі команди git ...
... і для більш простого використання я просто допомагав собі за меншу кількість використовуваних команд, тому мені не доводиться щоразу звертатися до сторінок "man". Команди заздалегідь визначені, а пошук їх максимально простий.

Я маю на увазі, ми ж програмісти? Налагодити роботу так, як ми потребуємо їх - наша робота.

Ось додатковий скріншот, це працює в 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( фіксація 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) .
(Об’єднав Хуніо С Хамано - gitster- у комітеті 5079cc8 , 25 вересня 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 - лише псевдоніми, що містять "фіксувати"

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 \")

Це просто виводить символ #(hex 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

Або введіть regexp, який показує всі відповідні псевдоніми та значення:

$ 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.