[英]How to replace internal git commands, such as `git status`, with custom aliases
这个答案教了如何在 git 别名中执行自定义 bash 命令,而这篇文章(一个强大的 Git 别名的怪异技巧)教得很好。 但是,当我为内部 git 命令设置别名时,它似乎不起作用。 如何用自定义脚本替换内部 git 命令?
例如:我有一个自定义 python 脚本: custom_script.py
print("hello")
在我的project_name/.git/config
文件中,我添加了这个别名:
[alias]
statuss = "!f() { \
python3 custom_script.py && git status; \
}; f"
然后我运行git statuss
并且它运行良好,我看到打印出“hello”。 随后是“git status”返回消息。
但是,如果我将别名从statuss
重命名为status
,它将不再有效。
[alias]
status = "!f() { \
python3 custom_script.py && git status; \
}; f"
我该怎么做才能通过简单地调用git status
,它首先调用我的“custom_script.py”然后运行git status
?
笔记:
Git 不允许您覆盖别名中的内部命令,因为这样做会破坏任何使用那些期望它们正常运行的内部命令的脚本。 这一点尤其重要,因为一些 Git 命令是 shell 脚本,覆盖这些命令可能会破坏 Git 的 shell 脚本。
您可以通过编写一个名为git
的 shell 脚本来覆盖它,将其放入$PATH
的目录中,这是完成它的最简单方法。 但是,请注意git
的第一个参数不必是命令: git
在命令之前采用大量选项,例如-c
和-C
,您的脚本需要解析这些选项以避免破坏任何其他可能调用git
的脚本(例如,可能包括您的编辑器)。
因此,虽然这是可能的,但它非常棘手,而且任何正确的解决方案都将相当冗长(这就是为什么我没有在这里尝试过)。 通常,推荐的解决方案是使用不反映内置名称的别名,这要简单得多。
但是,如果您只想将其用于交互式使用,则可以在$PATH
中创建一个名为git-wrapper
的脚本,并在其中执行以下操作:
#!/bin/sh
if [ "$1" = status ]
then
python3 custom_script.py
fi
exec git "$@"
然后,您可以在~/.bash_profile
或~/.zshrc
/.zshrc 中运行alias git=git-wrapper
(但不是~/.bashrc
或~/.zshenv
)。 这只会影响您专门编写git status
的情况,但不会影响任何脚本使用。 这对你来说可能足够好,也可能不够好。
您可以使用以下命令:git config --global alias.co checkout 就可以了。
链接: https ://git-scm.com/book/en/v2/Git-Basics-Git-Aliases
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.