为什么运行命令作为git别名会产生不同的结果?
我有以下1班轮,我用它来看看谁可能是帮助一个很好的候选人与代码peice的:为什么运行命令作为git别名会产生不同的结果?
git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
其中列出了在提交订单的作者,它的原油,但它的工作原理确定。
当我把它添加到我的混帐配置然而,像这样:
[alias]
guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
运行
git guru
给出不同的结果,从命令行运行它。
[email protected](rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
710 Author: dave <[email protected]>
415 Author: pete <[email protected]>
402 Author: craig <[email protected]>
相比:
[email protected](rp):~/git/apps$ git guru
859 Author: craig <[email protected]>
813 Author: paul <[email protected]>
798 Author: dave <[email protected]>
正如斯蒂芬·纳韦下面的注释,别名版本库的根目录中运行,有没有什么办法上运行我在目录中的命令,或指定?
看着你在做什么,你可能想用git shortlog -sn
来代替,因为这样做已经有问题了。
git别名不会全部运行在顶层。如git config manual中所述“请注意,将从存储库的*目录执行shell命令,该目录可能不一定是当前目录。”所以只有shell命令可以在顶层运行。如果你只是别名一个git子命令,它将运行在当前位置。以下会话日志演示了这一点:
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$ git rev-parse --show-cdup
../../
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup 'rev-parse --show-cdup'
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup
../../
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup2 '!git rev-parse --show-cdup'
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup2
[email protected] /c/src/WiRE.git/wdf/src (pt/wdf)
$
您的示例使用以'git'开头的别名命令。如果我尝试设置'git rev-parse --show-cdup'作为别名,它会返回一个错误,指出'git不是git命令',所以我怀疑你实际上也有一个感叹号,因此将它作为shell命令运行,因此从顶层运行。
GIT中的别名使用在工作目录(.git
生活在哪里)的顶层运行壳命令(即,通过!
前缀)。简单的别名(没有!
)在当前目录下运行。
谢谢Stefan,这回答了我的原始问题,我现在已经开始希望在相同的情况下让其他人更有用。 – 2012-01-12 23:52:32
这是一个相当不直观的Git行为。有谁知道如何在当前目录中运行别名?或者,如果当前目录在env var或其他东西中可用,以便在运行之前别名可以“cd”回正确的位置? – 2013-11-20 17:04:35
@JimStewart参见上面的Andrei Neculau的回答,它显示了如何做到这一点:) – waldyrious 2016-04-04 18:45:59
有没有什么办法可以在我进入的目录上运行命令,或者 指定?
是的,有。当你运行一个git命令时,你的环境得到一个GIT_PREFIX
变量与相对路径的值(从执行git之前的顶层到路径),所以你需要的是你的git别名(运行shell命令并且需要正确的pwd)与cd ${GIT_PREFIX:-.} &&
。
简单测试,将它添加到您的~/.gitconfig
[alias] p = !pwd && cd ${GIT_PREFIX:-.} && pwd
有关$ {GIT_PREFIX: - 。}'语法的解释,请参考:http://*.com/a/16753536/ 79111。 – 2016-08-11 13:31:23
看起来像你想'git的shortlog -sn'的方式。 – patthoyts 2012-01-12 12:30:11
@patthoyts,添加作为答案,它会得到一个蜱! – 2012-01-12 16:58:18