从中获取 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:-.}
。
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_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
'
当外部命令通过 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:-.}
。
Processes spawned by "
[alias] <name> = !process
" in the configuration can inspectGIT_PREFIX
environment variable to learn where in the working tree the original command was invoked.
'
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
'