当通过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...
答案 0 :(得分:7)
您需要在别名中添加cd ${GIT_PREFIX:-.}
。
配置中由“
[alias] <name> = !process
”生成的进程 可以检查GIT_PREFIX
环境变量以了解其中的位置 工作树调用了原始命令。
'
GIT_PREFIX
'设置为从原始当前目录运行“git rev-parse --show-prefix
”返回。
)
如果未定义GIT_PREFIX
(因为您正在从repo的根文件夹执行别名),它将被替换为“.
”。
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
'