我有以下1-liner,我用它来看看谁可能是一个很好的候选人,可以提供一些代码帮助:
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 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>
正如StefanNäwe所说,别名在你的存储库的根目录中运行,有没有办法在我所在的目录上运行命令,或指定?
答案 0 :(得分:23)
有没有办法在我所在的目录上运行命令,或者 指定?
是的,有。当您运行git命令时,您的环境会获得一个GIT_PREFIX
变量,其中包含相对路径的值(从顶层到执行git之前的路径),所以您需要的是git别名的前缀(运行shell命令和需要)右{pwd)与cd ${GIT_PREFIX:-.} &&
。
简单测试,将其添加到您的~/.gitconfig
[alias]
p = !pwd && cd ${GIT_PREFIX:-.} && pwd
答案 1 :(得分:13)
!
为前缀)的git的别名在工作目录(.git
所在的位置)的顶层运行。简单别名(没有!
)在当前目录中运行。
答案 2 :(得分:4)
看看你在做什么,你可能想要使用git shortlog -sn
,因为这已经完成了相关任务。
git别名并非都在顶层运行。如git config manual中所述“请注意,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'开头的别名命令。如果我尝试将'git rev-parse --show-cdup'设置为别名,则返回一个错误,指出'git is not a git command',所以我怀疑你实际上也有一个感叹号,因此将它作为shell命令运行,因此从顶层跑。