获取运行git别名的路径

6

当通过Git别名运行外部命令时,它会从存储库的根目录(通常是 .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

What I want is

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

在Git中,不允许别名参数,因此无法使用git add specificname...命令。

1
将这段内容翻译成中文,供 俄罗斯的 StackOverflow 使用 - Nick Volynkin
1个回答

10
你需要在别名中添加cd ${GIT_PREFIX:-.}
(Git 1.7.6+:

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

git config:

'GIT_PREFIX'是通过从原始当前目录运行'git rev-parse --show-prefix'返回的。

)

)

如果未定义GIT_PREFIX(因为您正在从存储库的根文件夹执行别名),它将被替换为'.'。
您可以在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
'

我一直期待着你的精彩回答。 :) - Nick Volynkin
@NickVolynkin 我刚看到一个类似的答案(针对略有不同的问题):https://dev59.com/Wmoy5IYBdhLWcg3wA5aC#21929373 - VonC
1
还有一个细节::-. 语法是做什么的? - Nick Volynkin
1
@NickVolynkin 我的意思是:“如果GIT_PREFIX未定义(因为您正在从存储库的根文件夹执行别名),它将被替换为'.'。” 当您从根文件夹执行别名时,GIT_PREFIX未定义。 因此需要使用“.”(当前文件夹)。 - VonC
哦,一个替换。我还没习惯 shell 的花式语法。)) - Nick Volynkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接