当前位置: 首页 > news >正文

PHP项目中composer和Git的组合使用

highlight: 在国内由于众所周知的原因,composer的package可能无法访问,解决办法是使用中国的全镜像:

composer config -g repositories.packagist composer http://packagist.phpcomposer.com

在需要使用composer package的地方创建composer.json:

{

  "name": "kidsit/myphppackage",

      "type": "wordpress plugin",

"repositories": [

  "type": "vcs",

"url": "git@github.com/kidsit/myphppackage.git"

],

"autoload": [

  "files" :["vendor/kidsit/myphppacakge/packge-autoload.php" ]

]

}

随后就可以通过composer install来安装这个放在github上面的package了。

但是如果我们又希望能够直接在项目中开发变更该package,并且直接git push的话怎么操作呢?

这时composer的一个选项就非常重要了 --prefer-source,执行:

composer install --prefer-source,

这时composer则直接将上述存放于github中的package repo下载下来放到你的项目目录中,这样你既可以使用composer的依赖管理及PHP autoload功能,又能使用Git及Github的版本控制功能。

如果我们要安装laravel,同时又要考虑将来的laravel的小版本升级问题,又要考虑自己写的代码的逻辑分层维护问题:比如将分为backend,frontend分别作为两个repo来管理,应该如何做呢?

1.在自己的github目录fork一个laravel repo;

2.composer create-project laravel/laravel learning-laravel5 dev-develop ----repository-url 指定用你的repo来安装laravel

注意:上述--reposityory-url是一个packages.json的链接,该文件中,你可以指定require的package,url指向你fork过来的laravel repo

在这里综合使用composer的package manage/dependency management的强大功能以及git的版本控制功能,既按照我们的定制化要求安装了laravel初始项目(从我们指定forked repo来安装),又为后续准备初始项目repo打好了基础。

3.将该目录中的项目开发push到项目repo中;在上面第2.步中,由于有很多原始laravel项目的历史信息,我们是不希望看到的,有以下方法可以参考:

http://stackoverflow.com/questions/9683279/make-the-current-commit-the-only-initial-commit-in-a-git-repository

复制代码

git checkout --orphan newBranch  ==该命令使用--orphan来创建新的branch后,历史信息就会丢失??并且所有文件都处于unstaged的状态
git add -A  # Add all files and commit them ==将所有文件入库
git commit 
git branch -D master  # Deletes the master branch 
git branch -m master  # Rename the current branch to master ==》将新的branch更名为master
git push newprojectrepo master  #该命令就将创建我们自己的项目repo,而且在项目repo中就只有一条历史记录了!!!可能需要--force参数,因为祖先有些混乱了!
再随后,项目组成员就直接git clone newprojectrepo,看到清爽的只有自己工作相关的commits。
再随后,项目repo又可以pull我们fork过来的laravel新的bugfix更新

复制代码

 上面链接中另外一种方案是直接获取forked laravel repo后将.git文件夹删除,重新init repo,不知道这种方案是否可行,特别是将来需要pull时,是否能够自动merge?

另外一篇文章也可参考pull时合并得到一个commit:

http://eli.thegreenplace.net/2014/02/19/squashing-github-pull-requests-into-a-single-commit

4.在该目录做项目开发,可以考虑以git subtree来将前后台分离,前台可以独立出去作为子项目来开发,另创一个前台repo;

5.当laravel升级时,可以通过反向pull request,将fork过来的laravel repo做update,随后在项目中创建一个临时toupgradelaravelbranch, git pull操作在这个branch上更新laravel,随后在master branch上,直接git merge toupgradelaravelbranch --squash,最后git commit -m"upgrade laravel from 4.1 to 4.2", git push,这时项目就自动升级了laravel(注意如果是大的版本升级的话,可能需要好好测测,甚至API,目录结构都变掉了),同时保持了项目历史的纯洁性;

6.更新laravel的项目做好测试后,push到项目repo中,供team分享使用;

。。。

单独require一个package的方法: 

composer require laracasts/utilities:~2.0

https://www.cnblogs.com/kidsitcn/p/4541288.html

相关文章:

  • Sqli-labs靶场第16关详解[Sqli-labs-less-16]自动化注入-SQLmap工具注入
  • 电子设计从零开始”这本书的适用对象是谁?
  • sql基本语法+实验实践
  • 解锁智慧之门:自然语言处理与神奇的语言模型
  • 关于数据提交上传服务端的数据类型以及项目打包上线的流程
  • mysql5.7配置主从
  • 技术实践|百度安全「大模型内容安全」高级攻击风险评测
  • GO语言学习笔记(与Java的比较学习)(五)
  • 【IOS】启动报错Cannot launch ‘/private/var/containers/Bundle/Application/....‘
  • Vue组件置底方法,ElementPlus布局
  • 数据分析-Pandas数据的画图设置
  • Qt 简约美观的加载动画 第九季
  • AGM CPLD (AGRV2K )的时钟(外部时钟和片上内部振荡器)
  • STM32 (4) GPIO(1)
  • 探索Terraform实践:优化基础设施管理
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《剑指offer》分解让复杂问题更简单
  • Computed property XXX was assigned to but it has no setter
  • CSS 三角实现
  • Effective Java 笔记(一)
  • JSONP原理
  • Laravel核心解读--Facades
  • magento2项目上线注意事项
  • node入门
  • Python实现BT种子转化为磁力链接【实战】
  • redis学习笔记(三):列表、集合、有序集合
  • Zepto.js源码学习之二
  • 回顾2016
  • 近期前端发展计划
  • 蓝海存储开关机注意事项总结
  • 入门级的git使用指北
  • 智能网联汽车信息安全
  • Prometheus VS InfluxDB
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • Spring Batch JSON 支持
  • #QT(串口助手-界面)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (4)STL算法之比较
  • (70min)字节暑假实习二面(已挂)
  • (C)一些题4
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)Linux——Linux常用指令
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (篇九)MySQL常用内置函数
  • (五)网络优化与超参数选择--九五小庞
  • (正则)提取页面里的img标签
  • (转)IOS中获取各种文件的目录路径的方法
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 4.0中的泛型协变和反变
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .net网站发布-允许更新此预编译站点
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET中GET与SET的用法
  • @private @protected @public