13

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

例子:

$ 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

4 回答 4

3

另一种选择是在 Git wiki 部分中列出的命令想法Aliases给出的alias部分.git/config

[alias]

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

然后,这会将您的所有别名列为命令行。

于 2012-06-21T16:39:14.933 回答
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' -"

于 2012-06-21T13:26:07.683 回答
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'

以获得与上述相同的效果。

于 2012-06-21T14:14:55.123 回答
0

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

这也将减轻因生成(另一个)shell 及其进行的任何处理而产生的任何开销。

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

例子

将别名ls1定义为:

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

将产生如下输出(在默认分支 master上提交2befe97后在 git自己的存储库上执行):

~/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=)$ 
于 2020-08-18T09:39:01.123 回答