php git 插件,如何优雅的解决composer添加扩展之后,提交git项目扩展变成了git子模块...

出现composer git submodule背景

在php项目中,使用composer引入新的扩展的时候遇到了一个错误,三方扩展变成了这个项目的子项目,提交代码之后,这个扩展编程了git submodule,实际上我们提交之后的不是一个目录,vendor里面的这个项目是一个空的文件,导致线上引入资源而出现了故障。

在网上搜索了一下这个问题《composer安装后插件被当成GIT submodule(GIT子项目)》?网上给了三种解答,但是都不能解答我的问题,一方面他们说的不准确,还有可能说的不仔细吧。

出现这个问题的原因

composer在添加新的资源你的时候,如果项目是git仓库托管的,是通过git clone将代码拉至本地vendor目录的,所以该文件下会有一个.git的目录,这个其实是多余的,如果一个git托管的项目中再次出现git托管的项目,那么这个子项目就会被当做submodule被提交,

这里就不介绍git submodule了。

解决方案

如果解决这个问题呢?当然是直接删除扩展的.git目录了啦!需要每次手动将这个目录删除?每次更新之后还要删除?那么多的扩展都要一个一个的删除?

如果你很了解composer的处理机制的话,这些事情就变得十分的简单了。

composer.json中,我们可以在composer中自定义,composer处理过程中添加自己的钩子函数。脚本如下:找到vendor项目中所有的.git文件,然后执行rm -rf,即可。

find vendor -type d -name .git -exec rm -rf '{}' \;

composer.json的内容如下,在post-install-cmd和post-update-cmd执行之后执行我们的shell脚本:

{

"scripts": {

"post-install-cmd": [

"find vendor -type d -name .git -exec rm -rf '{}' \\;",

],

"post-update-cmd": [

"find vendor -type d -name .git -exec rm -rf '{}' \\;",

]

},

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值