我正在尝试编写一个将被称为 git 别名的脚本。
该脚本是一个包装器git merge
,因此当我在脚本中调用它时,我想将其所有参数按git merge
原样传递给它。
别名设置如下:
git config alias.my-merge-wrapper '!f(){ path/to/script.sh $@; }; f'
我的第一次尝试是这样的:
#!/bin/sh
git merge "$@"
遗憾的是,这不适用于卡住选项(见这里):
例如,如果我像这样调用我的脚本:
git my-merge-wrapper -m"message (b2 into b1)"
它失败了,因为git merge
它被这样调用:
git merge -mmessage (b2 into b1)
所以我明白了merge: (b2 - not something we can merge
我也尝试使用$*
别名和脚本,但没有成功。
有没有什么办法可以解决这个问题?
答案1
$@
解决方案是在别名中也引用:
git config alias.my-merge-wrapper '!f(){ path/to/script.sh "$@"; }; f'
然后 git stuck 选项的简称和它引用的参数被分组为一个独特的 shell 脚本参数(就好像它是一样'-mmessage (b2 into b1)'
),但 git 可以毫无问题地支持它。