执行Git别名时显示完整命令?

时间:2012-06-21 09:15:31

标签: git git-config

使用别名时是否有显示完整命令的选项?

示例:

$ git ci -m "initial commit"
Full command: git commit -m "initial commit"
...
$ git lg
Full command: git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
...

别名非常方便,但我喜欢学习/提醒我的别名实际上做了什么(我的大部分别名是从互联网上复制的)

4 个答案:

答案 0 :(得分:3)

另一个选项是Aliases给出的Git wiki部分中列出的命令构思,alias

.git/config部分

[alias]

    aliases = !git config --get-regexp 'alias.*' | colrm 1 6 | sed 's/[ ]/ = /'

然后将所有别名列为命令行。

答案 1 :(得分:2)

举个例子:

log-1 = "!sh -c 'echo \"Full command: git log --graph --decorate --pretty=oneline --abbrev-commit\"; git log --graph --decorate --pretty=oneline --abbrev-commit' -"

调用shell并执行给定的命令。

在你的lg例子中,你需要进行大量的转义,因为你在qoutes和需要转义的字符中有引号。我建议你创建自己的漂亮格式并在别名中使用它。让我们假设我们称你的格式为我的。这是你需要做的:

git config --add pretty.mine "%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset"

,别名为

lg = "!sh -c 'echo \"Full command: git log --graph --pretty=mine --abbrev-commit --date=relative\"; git log --graph --pretty=mine --abbrev-commit --date=relative' -"

答案 2 :(得分:0)

如果您正在使用bash,则可以在别名中添加“set -x”。所以,举个简单的例子,如果你有一个别名:

ol = !sh -c 'git log --oneline'

你将其改为:

ol = "!sh -c 'set -x; git log --oneline'"

由于分号,它需要双引号。

为了允许命令行的其余部分,你需要添加“$ @”,并且还添加一个“ - ”,以便参数从$ 1开始。这给你:

ol = "!sh -c 'set -x; git log --oneline $@' -"

更复杂的别名可能已经有了这些东西。

我不知道为所有别名设置全局别名的方法虽然它会很好!

编辑: 这实际上使用shell函数更容易一些。你可以这样做:

git config alias.ol '!f() { set -x; git log --oneline $@; }; f'

获得与上述相同的效果。

答案 3 :(得分:0)

使用环境变量GIT_TRACE启用git的trace feature将显示git别名扩展后git执行的确切命令。

这还将减轻产生(另一个)shell以及进行任何处理所引起的所有开销。

更复杂的git命令将提供详细的输出,解释git在做什么。如果只想知道别名扩展的结果,则可以捕获stderr和grep进行扩展(请参见下面的示例)。但是,请注意使用实际修改存储库的命令来执行此操作(如果适用,请使用--dry-run)。

示例

具有别名ls1的定义为:

~$ cat .gitconfig|grep ls1
    ls1 = log --oneline -1

将产生如下输出(在默认own repository提交2befe97后,在git的branch master上执行):

~/git (master=)$ GIT_TRACE=1 git ls1
11:14:16.075127 git.c:561               trace: exec: 'git-ls1'
11:14:16.075182 run-command.c:334       trace: run_command: 'git-ls1'
11:14:16.078823 git.c:278               trace: alias expansion: ls1 => 'log' '--oneline' '-1'
11:14:16.079032 git.c:344               trace: built-in: git 'log' '--oneline' '-1'
11:14:16.080189 run-command.c:334       trace: run_command: 'pager'
11:14:16.080536 run-command.c:193       trace: exec: 'pager'
2befe97 Eighth batch
~/git (master=)$ 

赶超扩展

~/git (master=)$ GIT_TRACE=1 git ls1 2>&1 |grep "trace: alias expansion"
11:37:45.014231 git.c:278               trace: alias expansion: ls1 => 'log' '--oneline' '-1'
~/git (master=)$