获取运行git别名的路径

时间:2015-07-30 11:06:53

标签: git shell git-alias

当通过Git别名运行外部命令时,它从存储库的rood目录运行(.git /通常位于该目录中)。可以通过以下方式检查:

$ cd /some/path/inside/repo
$ echo $(git -c alias.root='!pwd' root)

现在,有没有办法确定运行别名的确切路径?

在XY问题的情况下,这就是我正在做的事情:我想要一个启动shell函数的别名,它反过来运行几个Git命令,比如ls-files。它应该只在它被调用的路径上工作,所以它应该知道它。

如果我只是运行该函数,它的效果很好,因为它不会改变路径并且在它被调用的地方运行。但我想要更多的原生行为。我现在拥有的是

git-add-specificname -opt -opt2 --long-option -- path1 path2

我想要的是

git add-specificname -opt -opt2 --long-option -- path1 path2

不允许使用Git中的别名参数,因此git add specificname...

没有机会

1 个答案:

答案 0 :(得分:7)

您需要在别名中添加cd ${GIT_PREFIX:-.}

Git 1.7.6+

  

配置中由“[alias] <name> = !process”生成的进程      可以检查GIT_PREFIX环境变量以了解其中的位置      工作树调用了原始命令。

git config

  

'GIT_PREFIX'设置为从原始当前目录运行“git rev-parse --show-prefix”返回。

如果未定义GIT_PREFIX(因为您正在从repo的根文件夹执行别名),它将被替换为“.”。

您可以在t/t1020-subdirectory.sh

中看到该变量
test_expect_success 'GIT_PREFIX for !alias' '
    printf "dir/" >expect &&
    (
        git config alias.test-alias-directory "!sh -c \"printf \$GIT_PREFIX\"" &&
        cd dir &&
        git test-alias-directory >../actual
    ) &&
    test_cmp expect actual
'