Git命令别名及其参数在Fish shell中的使用

3
人性化的Git别名包括一些需要参数的函数,例如: Human Git aliases
into = "!f() { B=$(git current-branch); git checkout $1; git pull; git merge $B --no-edit; }; f"

我在使用fish时遇到了一些问题,希望能够得到帮助。

我可以创建一个称为git-into的fish别名,这个别名可以工作,但是我更想要一个git别名,这样就不需要记住哪些命令使用破折号,哪些使用空格。

使用“! fish -c STUFF”或“! bash -c STUFF”无法正确传递参数。

怎么才能做到这一点呢?

git into repository

会执行与上述脚本相当的操作吗?
2个回答

3
在别名前加上"!"确实意味着git在shell中运行它,但这里使用的不是fish shell。它是在构建时作为SHELL_PATH给出的shell,最有可能(并默认为)"/bin/sh"。由于git使用相同的shell来运行其他东西(例如分页器),因此它绝对应该是一个符合POSIX标准的shell,这排除了fish。
您选择的登录shell并不重要。
所以您可以简单地使用原始代码,它应该可以工作。
或者,您可以将此放入名为git-into(没有结束,适当的shebang-line和可执行位)的脚本中$PATH,并且当您调用git into时,git会找到它。
如果您真的想在这里使用fish -c,您将不得不处理两个略微不兼容的引号层,这不是我推荐的做法。

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

获取当前分支名称的简单方法:git rev-parse --abbrev-ref HEAD - Romain Valeri
抱歉,我的表述不够清晰。我已经从George Gritsouk的.gitconfig文件中获取了其余的别名(人性化的Git别名),因此“current-branch = rev-parse --abbrev-ref HEAD”已经被定义。 - Carl Mitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接