我如何打印我的git别名列表,即,类似于bash别名命令的东西?
当前回答
使用Bash列出全局和本地Git别名。即使没有安装Git,也可以正常工作。
$ cat ~/.gitconfig .git/config 2>/dev/null | sed -n '/alias/,/\[/p' | grep -v '^\['
co = checkout
br = branch
ci = commit
st = status
2>/dev/null -隐藏配置文件不存在时的错误 Sed -n '/alias/,/\[/p' -列出alias部分的内容 Grep -v '^\[' -隐藏部分标记(以左方括号开始)
相同命令的Bash别名
$ alias gita="cat ~/.gitconfig .git/config 2>/dev/null | sed -n '/alias/,/\[/p' | grep -v '^\['"
$ gita
co = checkout
br = branch
ci = commit
st = status
其他回答
另一种选择(纯粹是我觉得容易记住的东西):
Git配置——list | grep别名
以下是在Linux、MacOSX和Windows(使用msysgit)下的工作。
使用gitla来显示.gitconfig中的别名
我听到“bash脚本”了吗?;)
关于上面评论中的“不需要”部分,我基本上为我的别名创建了一个类似概述的手册页。为什么要这么大惊小怪?那不是太过分了吗?
继续阅读…
我在.gitconfig中设置了这样的命令,分隔为TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
并简单地定义另一个别名来grep已定义别名的TAB=部分。(所有其他选项在定义中'='前后都没有制表符,只有空格。)
没有附加到别名的注释也附加了一个选项卡=====,因此它们显示在grepping之后。
为了更好地查看,我将grep输出管道到less中,像这样:
基本版:(黑/白)
#.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用法,以便将颜色代码输入到输出中。
less的-R标志用于获得less中显示的颜色。
(我最近发现,带有滚动条的长命令在移动设备上不能正确显示:它们的文本被切断,滚动条也不见了。这可能是这里的最后一个代码片段的情况,在查看这里的代码片段时请记住这一点。)
为什么要施展这样的魔法呢?
我有很多化名,都是为我量身定做的。 此外,其中一些会随着时间的推移而变化,因此,掌握最新列表的最佳方法是解析.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帮助子模块,也不需要git h子模块,只需要gh子模块就可以获得帮助。只是一些字符,但你多久打一次?
我使用以下所有的方法,当然只有在使用快捷键的时候……
添加 提交 提交,修改 复位——硬磁头 推 获取 变基 结帐 分支 Show-branch(有很多变体) shortlog reflog 差异(变奏) Log(有很多变化) 状态 显示 笔记 ...
这只是我的想法。
我经常不得不在没有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中是有效的:
好处:如果你在linux或mac上,彩色手册页可以帮助你很多:
彩色手册页
另一个git别名(称为alias)打印出git别名:添加以下到你的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}..
注意:引用regexp以防止将shell扩展为glob,尽管如果/当没有文件匹配该模式时,在技术上并不需要这样做。另外:任何regexp都可以,除了不能使用^(模式开始)和$(模式结束);它们是隐含的。假设您没有使用git-extras中的git-alias。
而且,显然你们的别名也会有所不同;这些只是我配置的几个。(也许你也会发现它们很有用。)
我在2018年6月提到“概述列表-最常用的git命令”,git 2.18“使用——list-cmds=alias (commit 3301d36)”,carej在他的回答中报告。
git --list-cmds=alias
除此之外,或者git config——get-regexp别名,你可以将它的输出与git帮助结合起来,它的输出将在git 2.14.x/2.15中发生变化:
“git help co”现在说“co is alias to…”,而不是“git co is”。
参见Kaartic Sivaraam提交b3a8076(2017年9月12日)。 (由Junio C Hamano—gitster—在commit 5079cc8中合并,2017年9月25日)
帮助:将信息更改为更精确的信息 当用户尝试在一个别名命令上使用'——help'选项时,关于别名的信息将打印如下所示:
$ git co --help
`git co' is aliased to `checkout'
这似乎是不正确的,因为用户只有'co'而不是'git co'的别名。 在用户使用了'tgit'这样的别名的情况下,这甚至可能是不正确的。
$ tgit co --help
`git co' is aliased to `checkout'
我喜欢@Thomas的回答,我做了一些修改。
特点:
添加颜色 和输入参数:让用户选择命令(从git配置——get-regexp ^.) 添加过滤器
# .gitconfig
[alias]
show-cmd = "!f() { \
sep="㊣" ;\
name=${1:-alias};\
echo -n -e '\\033[48;2;255;255;01m' ;\
echo -n -e '\\033[38;2;255;0;01m' ;\
echo "$name"; \
echo -n -e '\\033[m' ;\
git config --get-regexp ^$name\\..*$2+ | \
cut -c 1-40 | \
sed -e s/^$name.// \
-e s/\\ /\\ $(printf $sep)--\\>\\ / | \
column -t -s $(printf $sep) | \
sort -k 1 ;\
}; f"
使用
Git显示-cmd列表别名 Git show-cmd "" st列表别名,它应该包含字符串st Git show-cmd i18n show i18n设置 Git show-cmd核心编辑器显示核心设置,它应该包含编辑器
DEMO
它在窗户上也能正常工作
解释
you can write the long script on .gitconfig use the syntax as below: [alias] your-cmd = "!f() { \ \ }; f" name=${1:-alias} same as name = $1 if $1 else -alias echo -n -e (see more echo) -n = Do not output a trailing newline. -e Enable interpretation of the following backslash-escaped '\\033[38;2;255;0;01m' (see more SGR parameters) \\033[48; : 48 means background color. \\033[38;2;255;0;0m : 38 means fore color. 255;0;0 = Red cut -c 1-40 To avoid your command is too long, so take 40 char only. sed -e 's/be_replace_string/new_string/' replace string to new string. (if you want to put the special-char(such as space, > ...) should add \\ as the prefix. column -t -s $(printf $sep) formats all lines into an evenly spaced column table. sort -k 1 sorts all lines based on the value in the first column
推荐文章
- 如何在Mac上设置我的默认shell,例如Fish?
- gitignore是什么?
- Git从另一个目录克隆
- 如何在Linux虚拟机的控制台中上下滚动
- 在这个数据库中&,<<,*是什么意思?yml文件?
- 如何获得我的代码的最新版本?
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何在终端中提高光标速度?
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 修改一个目录下所有文件和文件夹的权限为644/755
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?