为了账号安全,请及时绑定邮箱和手机立即绑定

带有位置参数的Git别名

带有位置参数的Git别名

Git
慕桂英546537 2019-07-17 09:24:13
带有位置参数的Git别名基本上我只是想化名:git files 9fa3.执行命令:git diff --name-status 9fa3^ 9fa3但是git似乎没有将位置参数传递给别名命令。我试过:[alias]     files = "!git diff --name-status $1^ $1"     files = "!git diff --name-status {1}^ {1}".还有其他几个,但这些都不起作用.退化的情况是:$ git echo_reverse_these_params a b c d e e d c b a.我该怎么做呢?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

最明显的方法是使用shell函数:

[alias]
    files = "!f() { git diff --name-status \"$1^\" \"$1\"; }; f"

没有的别名!被视为Git命令;commit-all = commit -a.

带着!,它在shell中作为自己的命令运行,允许您像这样使用更强大的魔法。

UPD
因为命令在存储库的根处执行,所以可以使用${GIT_PREFIX}变量时,当引用命令中的文件名时。


查看完整回答
反对 回复 2019-07-17
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

你也可以参考sh直接(而不是创建函数):

[alias]
        files = !sh -c 'git diff --name-status $1^ $1' -

(请注意行尾的破折号-你会需要的。)


查看完整回答
反对 回复 2019-07-17
?
温温酱

TA贡献1752条经验 获得超4个赞

您要寻找的别名是:

files = "!git diff --name-status \"$1\"^ \"$1\" #"

通过论证验证:

files = "!cd -- \"${GIT_PREFIX:-.}\" && [ x$# != x1 ] && echo commit-ish required >&2 || git diff --name-status \"$1\"^ \"$1\" #"

这个最终#很重要-它阻止所有用户提供的参数被shell处理(它将它们注释掉)。

注:git将所有用户提供的参数放在命令行的末尾。若要查看此操作,请尝试:GIT_TRACE=2 git files a b c d

逃逸者(由于筑巢)引号对于包含空格或"; rm -rf --no-preserve-root /;)


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 428 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信