带有参数和鱼壳的Git别名

时间:2018-11-16 15:14:17

标签: git fish

Human Git aliases包含一些带有参数的函数,例如

into = "!f() { B=$(git current-branch); git checkout $1; git pull; git merge $B --no-edit; }; f"

我很难让类似的东西在鱼上工作。
我可以创建一个鱼别名,例如git-into,该别名可以起作用,但是我宁愿拥有git别名,这样我就不必记住哪个命令使用破折号和哪个使用空格了。

使用! fish -c STUFF" or "! bash -c STUFF不能正确传递参数。

我该怎么做

git into repository

与上述脚本等效吗?

2 个答案:

答案 0 :(得分:3)

添加前导“!”别名确实意味着git在shell中运行它,但是shell在这里不是鱼。它是在构建时以SHELL_PATH的形式给出的shell,最有可能(默认情况下)为“ / bin / sh”。而且由于git使用相同的shell来运行其他内容(例如,分页器),所以它肯定是POSIX兼容的,可以排除鱼。

您选择的用户登录shell无关紧要。

因此您可以简单地使用原始代码,它应该可以工作。

或者,您可以将其放入$ PATH中名为git-into的脚本中(无结束,适当的shebang行和可执行位),并且git在调用git into时会找到它。

如果您真的要在这里使用fish -c,则必须处理两个稍微不兼容的引号层,我不建议这样做。

答案 1 :(得分:0)

没有任何git current-branch

如果需要当前的分支名称:

# extract the current branch name
git branch | grep \* | cut -d ' ' -f2

# or 
git rev-parse --abbrev-ref HEAD

# since you are already on the current branch all you need is pull & merge
# be aware that there can be conflicts
into = "!f() { git pull; git merge $B --no-edit; }; f"

如果您想传递参数并签出其他分支,则您已经在别名中添加了它

git checkout $1