【问题标题】:Get the path where git alias was run from获取运行 git 别名的路径
【发布时间】:2015-07-30 11:06:52
【问题描述】:

当通过 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... 没有机会

【问题讨论】:

标签: git shell git-alias


【解决方案1】:

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

(Git 1.7.6+:

配置中“[alias] <name> = !process”产生的进程 可以检查GIT_PREFIX 环境变量以了解在哪里 调用原始命令的工作树。

git config:

'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
'

【讨论】:

  • 我一直期待您的精彩回答。 :)
  • @NickVolynkin 我刚刚看到了一个类似的答案(对于一个稍微不同的问题):stackoverflow.com/a/21929373/6309
  • 更多细节::-. 语法有什么作用?
  • @NickVolynkin 我的意思是“如果未定义 GIT_PREFIX(因为您正在从 repo 的根文件夹执行别名),它将被替换为 '.'。”。当您从根文件夹执行别名时,GIT_PREFIX 未定义。因此需要使用'.' (当前文件夹)
  • 哦,换人了。不能习惯 shell 的花哨语法。 ))
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多