Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么以git别名运行命令会产生不同的结果?_Git - Fatal编程技术网

为什么以git别名运行命令会产生不同的结果?

为什么以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 为从命令行运行

我使用以下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
为从命令行运行它提供不同的结果

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_前缀:-.}
语法的解释,请参阅:。