前几天发布了composer包,发现安装后总有.git目录,这样在git提交的时候该目录会被识别为submodule,管理起来比较麻烦。 网上有人说是因为安装了dev-master版本导致,但是,指定某个版本号安装还是会有.git目录。 后来无意间发现有位兄台说是因为发布在gitee上导致的,试了一下,从github上发布果然没有问题,从gitee发布,安装后就会有.git目录。 解决方案: 1 首选github,但是github有时候会打不开,或者打开速度慢 2 写个自动删除的程序,把vendor目录下的 .git 目录删掉 参考文档:https://docs.phpcomposer.com/articles/scripts.html 在根composer.json文件中配置script节点
"scripts":{
"post-install-cmd":"libs\\RemoveVendorGitDir::postInstall",
"post-update-cmd":"libs\\RemoveVendorGitDir::postUpdate"
}
把RemoveVendorGitDir.php放到你项目中的libs命名空间下,内容为:
<?php
namespace libs;
class RemoveVendorGitDir
{
public static function postUpdate()
{
self::del();
}
public static function postInstall()
{
self::del();
}
private static function findGitDir($dir){
static $gitDirs=[];
$items = scandir($dir);
foreach($items as $item){
if($item!='.' && $item!='..'){
if(!is_dir($dir.$item)){
continue;
}else{
if($item=='.git'){
$gitDirs[] = $dir.$item;
}else{
self::findGitDir($dir.$item.DS);
}
}
}
}
return $gitDirs;
}
private static function del(){
defined('DS')?:define('DS',DIRECTORY_SEPARATOR);
$baseDir = __DIR__.DS.'..'.DS.'vendor'.DS;
$gitDirs = self::findGitDir($baseDir);
if($gitDirs){
if(strpos(strtoupper(PHP_OS),'WIN')!==false){
foreach ($gitDirs as $gitDir){
exec("rmdir /s /q ".$gitDir);
}
}else{
foreach ($gitDirs as $gitDir){
exec("rm -rf ".$gitDir);
}
}
}
return true;
}
}
|