为什么以git别名运行命令会产生不同的结果?
我使用以下1行代码来确定谁可能是代码列表帮助的最佳人选:为什么以git别名运行命令会产生不同的结果?,git,Git,我使用以下1行代码来确定谁可能是代码列表帮助的最佳人选: git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 它按提交的顺序列出了作者,虽然很粗糙,但效果还不错 但是,当我将其添加到git配置时,如下所示: [alias] guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 运行 git guru 为从命令行运行
git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
它按提交的顺序列出了作者,虽然很粗糙,但效果还不错
但是,当我将其添加到git配置时,如下所示:
[alias]
guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
运行
git guru
为从命令行运行它提供不同的结果
stuart@beavis(rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
710 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>
415 Author: pete <pete@b2368a2b-315f-46b9-a0b0-05934f827f41>
402 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>
stuart@beavis(rp):~/git/apps$git log--pretty=short.|grep^Auth | sort | uniq-c | sort-nr
710作者:戴夫
415作者:皮特
402作者:克雷格
与之相比:
stuart@beavis(rp):~/git/apps$ git guru
859 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>
813 Author: paul <paul@b2368a2b-315f-46b9-a0b0-05934f827f41>
798 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>
stuart@beavis(rp):~/git/apps$git guru
作者:克雷格
作者:保罗
作者:戴夫
正如Stefan Näa我们在下面注意到的,别名运行在存储库的根目录中,有没有办法在我所在的目录上运行该命令,或者指定?git的别名使用shell命令(即前缀为
!
)运行在工作目录的顶层(其中.git
存在)。简单别名(不带!
)在当前目录下运行。查看您正在做的事情,您可能希望使用git shortlog-sn
,因为这已经完成了相关任务
git别名并非都在顶级运行。如“请注意,shell命令将从存储库的顶级目录执行,该目录不一定是当前目录。”中所述,因此只有shell命令才能在顶级运行。如果您只是将git子命令别名,它将在当前位置运行。以下会话日志演示了这一点:
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git rev-parse --show-cdup
../../
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup 'rev-parse --show-cdup'
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup
../../
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup2 '!git rev-parse --show-cdup'
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup2
pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$
您的示例使用以“git”开头的alias命令。如果我尝试将“git rev parse--show cdup”设置为别名,它将返回一个错误,指出“git不是git命令”,因此我怀疑您实际上也有一个感叹号,因此将其作为shell命令运行,从而从顶层运行
有没有办法在我所在的目录下运行该命令,或者
具体说明
是的,有。当您运行git命令时,您的环境会得到一个带有相对路径值的git\u PREFIX
变量(从顶层到执行git之前的路径),因此您需要的是在git别名(运行shell命令并需要正确的pwd)前面加上cd${git\u PREFIX:-.&
简单测试,将其添加到~/.gitconfig
[别名]
p=!pwd&&cd${GIT_前缀:-.}&&pwd
看起来你想要的是git shortlog-sn
。@patthoyts,把它作为答案加上&它会打勾的!谢谢Stefan,这回答了我最初的问题,我现在希望它能对其他处于同样情况的人更有用。这是一个相当不直观的Git行为。有人知道如何在当前目录中运行别名吗?或者,如果当前目录在一个env var或其他地方可用,那么别名可以在运行之前返回到正确的位置?@JimStewart请参阅上面Andrei Neculau的回答,它显示了如何执行:)有关${GIT_前缀:-.}
语法的解释,请参阅:。