Nic*_*kin 2 git shell git-alias
当通过Git别名运行外部命令时,它将从存储库的rood目录运行(.git /通常位于该目录中).可以通过以下方式检查:
$ cd /some/path/inside/repo
$ echo $(git -c alias.root='!pwd' root)
Run Code Online (Sandbox Code Playgroud)
现在,有没有办法获得别名运行的确切路径?`
在XY问题的情况下,这就是我正在做的事情:我想要一个启动shell函数的别名,它反过来运行几个Git命令,比如ls-files.它应该只在它被调用的路径中工作,所以它应该知道它.
如果我只是运行该函数,它运行良好,因为它不会更改路径并在其调用的位置运行.但我想要更多的原生行为.我现在拥有的是什么
git-add-specificname -opt -opt2 --long-option -- path1 path2
Run Code Online (Sandbox Code Playgroud)
我想要的是
git add-specificname -opt -opt2 --long-option -- path1 path2
Run Code Online (Sandbox Code Playgroud)
不允许在Git中使用别名参数,因此没有机会 git add specificname...
您需要添加cd ${GIT_PREFIX:-.}别名.
[alias] <name> = !process在配置中由" " 生成的进程可以检查GIT_PREFIX环境变量,以了解在工作树中调用原始命令的位置.
'
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
'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |