如何打印我的git别名的列表,即类似于bash alias
命令的内容?
如何打印我的git别名的列表,即类似于bash alias
命令的内容?
Answers:
这个答案建立在答案由约翰尼。如果您不使用git-alias
from ,则适用git-extras
。
在Linux上,运行一次:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
这将创建一个名为的永久git别名alias
,该别名将存储在~/.gitconfig
文件中。使用它会以与~/.gitconfig
文件中几乎相同的格式列出所有git别名。要使用它,请键入:
$ 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的解决方案确实对我有用
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
仅编辑文件。但是我的大多数别名都是在global中定义的~/.gitconfig
。
git config --global alias.aliases config --get-regexp '^alias\.'"
...然后git aliases
"
某个地方
alias
为此,我创建了一个git别名(足够奇怪)...如果您使用足够的别名,会时不时地方便使用...
$ 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脚本”吗?;)
关于上面注释中的“不需要”部分,我基本上为别名创建了一个手册页,如概述。为什么大惊小怪?那不是完全的矫kill过正吗?
继续阅读...
我已经在我的.gitconfig中设置了这样的命令,像这样分隔TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
并且只需定义另一个别名即可grep TAB=定义的别名的一部分。(所有其他选项在其定义中的“ =”前后都没有制表符,只有空格。)
未附加到别名的注释也被TAB=====附加,因此在grepping后显示。
为了更好地查看,我将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
获得帮助即可。它只是一些字符,但是您多久键入一次呢?
我会使用以下所有内容,当然只使用快捷方式...
这只是从我的头上。
我经常不得不在没有gui的情况下使用git,因为许多git命令在任何图形前端中均未正确实现。但是,每当我使用它们时,大多数情况下都是相同的。
在上一段提到的“未实现”部分:
我还没有找到可以与GUI进行比较的东西:
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
...
因此,我们可以使用以下命令grep出别名行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年6月用“ 概述列表-最常用的git命令 ” Git 2.18“ use --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
”。
参见Kaartic Sivaraam()的commit b3a8076(2017年9月12日)。(通过合并JUNIOÇ滨野- -在提交5079cc8,2017年9月25日)sivaraam
gitster
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
# ~/.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
... --> ...
(注意:这对我在Windows上的git bash中有效。对于其他终端,您可能需要调整转义。)
!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
列出所有别名:)
$
表示典型的Linux终端提示。在此终端中输入此行的其余部分,ENTER
然后弹出并显示别名列表。由于它内置于 git中,因此可在Linux和Windows(git bash)上运行。(这可能是git在命令行上使用别名时内部使用它来解析别名的功能。)
打印出git别名的另一个git
别名(称为alias
):将以下内容添加到gitconfig [alias]
部分:
[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}..
注意事项:引用正则表达式以防止shell扩展成为问题,尽管在技术上(如果/当没有文件与模式匹配时)没有必要。另外:任何正则表达式都可以,但不能使用^
(pattern start)和$
(pattern end);它们是隐含的。假设您不使用git-alias
来自git-extras
。
同样,您的别名显然会有所不同;这些只是我配置的一些。(也许您也会发现它们很有用。)