extend - 扩展现有的 git 命令
问题描述
有据可查的是,我可以通过将脚本/程序git-foobar
放在我的 $PATH 上来向 git 添加一个新命令,然后我可以调用它作为git foobar
.
但是,如果我想扩展现有的 git 命令怎么办?例如,该git worktree
命令具有动词 add、list、lock 等。我有一种非常具体的方式来组织我保存的位置以及我如何命名工作树。我编写了一个脚本“git-worktree”,它有一个“main”函数,如下所示:
declare action=$1
shift;
if [[ "$action" =~ -h ]]
then
script-usage
return 0
fi
case $action in
create | delete )
if [[ "$1" =~ -h ]]
then
script-usage
return 0
else
"git-worktree-${action}" "$@"
return $?
fi
;;
*)
"${git_bin}/git-worktree" "$@"
return $?
;;
esac
如果我键入“创建”或“删除”,我会调用脚本中其他地方定义的函数。对于其他任何事情,我只是传递给真正的git worktree
命令。
除了它不完全工作。键入git-worktree
执行我的脚本。打字git worktree
不会运行我的脚本。
是否有我遗漏的东西,或者我不能以与添加新命令相同的方式扩展现有的 git 命令?
解决方案
您需要遵循集线器使用的模式,其中您有一个替代脚本,您在 shell 中将其别名为git
. 该替代脚本将拦截相关的内置命令并执行您的自定义覆盖脚本。
#!/usr/bin/env bash
# my-git.sh
declare action=$1
shift;
case $action in
worktree )
exec git-worktree "$@"
;;
*)
exec git "$action" "$@"
;;
esac
假设上面的脚本在你的路径中的某个地方my-git.sh
,你可以alias git=my-git.sh
并且它应该可以工作
推荐阅读
- neural-network - 具有多层感知器反向传播的示例
- javascript - 我用 k 笔交易找到最大利润的函数返回一个空数组
- mongodb - 猫鼬如何计算字段百分比
- html - 为什么我的 Edge CSS 动画不同步?
- javascript - Angular:在innerHtml中使用锚标签
- django - 如何使用 for 循环创建多个类属性?
- swift - 如何从 Realm 设置 UIPickerView 选定值?
- java - 错误 9952 --- [nio-8081-exec-1] ohengine.jdbc.spi.SqlExceptionHelper : ORA-00923: FROM 关键字未在预期位置找到
- reactjs - React Native 登录表单
- kubernetes - 由于 crashloopback,Pod 被终止