从中获取 git 别名 运行 的路径

Get the path where git alias was run from

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

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

现在,有没有办法获取别名 运行 来自的确切路径?`


在 XY 问题的情况下,这就是我正在做的事情:我想要一个启动 shell 函数的别名,而该函数又是 运行 几个 Git 命令,像 ls 文件。它应该只在调用它的路径中工作,所以它应该知道它。

如果我只是 运行 函数,它会很好地工作,因为它不会更改路径并且 运行 正是调用它的地方。但我想要更多的本地行为。我现在拥有的是

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

我要的是

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

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

没有机会

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

(Git 1.7.6+:

Processes spawned by "[alias] <name> = !process" in the configuration can inspect GIT_PREFIX environment variable to learn where in the working tree the original command was invoked.

git config:

'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix' from the original current directory.

)

如果未定义 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
'