Як надрукувати список моїх псевдонімів git, тобто щось аналогічне alias
команді bash ?
Як надрукувати список моїх псевдонімів git, тобто щось аналогічне alias
команді bash ?
Відповіді:
Ця відповідь ґрунтується на відповідь по Джонні . Це відноситься , якщо ви не використовуєте 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 - псевдонімgetget-regexp
'^alias\.'
git config -e
а потім скористайтеся очима, щоб знайти [alias]
розділ. Але шанувальники git завжди, здається, кидають трохи баш сценаріїв або відповідності регулярних виразів, щоб вирішити свої проблеми, навіть коли це не потрібно :)
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'
Чи чув я "баш сценаріїв"? ;)
Щодо частини "не потрібна" у коментарі вище, я в основному створив таку сторінку, як огляд для своїх псевдонімів. Чому вся суєта? Хіба це не повний перебір?
Читати далі ...
Я встановив такі команди в моєму .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:
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-"
Насолоджуйтесь!
для вікон:
git config --list | findstr "alias"
У червні 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'
Додайте до свого .gitconfig
розділу [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Тоді ви можете зробити
git aliases
- показати ВСІ псевдонімиgit aliases 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 \")
Це просто виводить символ #
(hex 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
Або введіть 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
.
Також, очевидно, ваші псевдоніми будуть різними; це лише декілька, які я налаштував. (Можливо, ви теж знайдете їх корисними.)