如何解决git submodule.<name>.update 中的自定义命令
我正在尝试向 .gitmodule
文件添加自定义命令。根据文档:
执行带有单个参数(超级项目中记录的提交的 sha1)的任意 shell 命令。当 submodule.<name>.update
设置为 !command
时,感叹号后的余数为自定义命令。
我尝试了以下内容:
[submodule "mysub"]
path = mysub
url = mysub-url
branch = a-branch
update = !ls << a custom command is here
此外,submodule-config.c
中的代码包含以下内容:
} else if (!strcmp(item.buf,"update")) {
if (!value)
ret = config_error_nonbool(var);
else if (!me->overwrite &&
submodule->update_strategy.type != SM_UPDATE_UNSPECIFIED)
warn_multiple_config(me->treeish_name,submodule->name,"update");
else if (parse_submodule_update_strategy(value,&submodule->update_strategy) < 0 ||
submodule->update_strategy.type == SM_UPDATE_COMMAND) //<<< bummer! is it supposed to be
die(_("invalid value for %s"),var);
}
然而,所有这样做的尝试都以:fatal: invalid value for submodule...
那么,您知道子模块更新中的自定义命令发生了什么吗?这只是一个从未经过测试的疏忽吗?我错过了什么吗?
我使用 git 2.26.0
解决方法
然而,所有这样做的尝试都以:fatal: invalid value for submodule...
Git 版本太旧,无法支持该自定义命令选项(最初在 Git v1.6.1-rc1,Q3 2008
或者当您执行 $PATH
时该命令不在您的 git submodule update
中。
经过一番挖掘,我现在认为这种行为是有意为之,但并未反映在文档中,也未反映在错误消息中。
事实上,如果在 .git/config
中配置它就可以工作。
原因可能是:“通过克隆传递指向自定义命令的指针最终会导致无法访问自定义命令的路径。因此,.gitmodules 只能包含预定义的关键字。否则,可以使用 .git/config
将其配置在本地配置中。”。我不一定同意这一点。这一切都取决于项目的意图。
无论如何,git blame 显示了这一行:
e904deb89d9 (Jonathan Nieder 2019-12-05 01:28:28 -0800 498) submodule->update_strategy.type == SM_UPDATE_COMMAND)
和提交的日志:
e904deb89d - submodule: reject submodule.update = !command in .gitmodules (1 year,1 month ago) <Jonathan Nieder>
* d3ac8c3f27 - Sync with 2.14.6 (1 year,1 month ago) <Johannes Schindelin>
|\
| * 66d2a6159f - (tag: v2.14.6) Git 2.14.6 (1 year,1 month ago) <Johannes Schindelin>
所以,这个是故意的,看起来像是在 2.14.6 之后添加的。 @torek 建议这是出于安全考虑。我同意这是有道理的。
但是,如果在错误消息和/或文档中详细说明,那就太好了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。