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

PHP项目中composer和Git的组合使用的更多相关文章

  1. 实际项目中如何使用git命令

    使用工具:Git Bash 工作空间项目存放路径C:/用户/git/demoProject 操作步骤: 1.切换到git项目路径 cd  git/demoProject 2.git status   ...

  2. [转]实际项目中如何使用Git做分支管理 (A successful Git branching model)

    来自 https://nvie.com/posts/a-successful-git-branching-model/ In this post I present the development m ...

  3. git在项目中的实际运用

    项目中只运用git版本管理的情况下: 1.创建分支命令: git branch (branchname) 切换分支命令: git checkout (branchname) 当你切换分支的时候,Git ...

  4. git分支在项目中管理

    实际项目中如何使用Git做分支管理 2018年06月24日 18:08:24 ShuSheng007 阅读数:9241   版权声明: https://blog.csdn.net/ShuSheng00 ...

  5. java项目中日志的配置

    1.日志相关比较详细的介绍:https://www.cnblogs.com/tanshaoxiaoji/p/log4j_config.html 2.总结1中博客说的内容 目前市场上常用的日志有log4 ...

  6. [git]安装git-pylint-commit-hook提高python项目中的代码质量

    什么是'git-pylint-commit-hook' 我在工作中,团队为了保证代码和提高代码的质量,要求每个项目都要求安装git-pylint-commit-hook,它是个钩子,会在你提交代码到本 ...

  7. 在VS项目中通过GIT生成版本号作为编译版本号

    上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号.虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟(可能要归功于那段捣鼓 ROM 的时光),但少有 ...

  8. ThinkPHP公共配置文件与各自项目中配置文件组合的方法

    ThinkPHP公共配置文件与各自项目中配置文件组合的方法 文章TAG:thinkphp 公共配置文件 时间:2014-11-25来源:www.aspku.com 作者:源码库 文章热度: 146 ℃ ...

  9. Eclipse中使用git把项目导入到osc@git中

    方便Eclipse用户使用Git把项目导入到osc@git中进行管理. Eclipse Git osc@git 一.原有项目:  项目名为TestGit 二.在osc@git上面创建一个新项目库. 填 ...

随机推荐

  1. safeseh+dep保护绕过

    [文章作者]       :h_one [漏洞程序名称]:mplayer.exe [漏洞类型]       :缓冲区溢出 [保护方式]       :safeseh+dep [操作平台]       ...

  2. 打造XP下可运行的微型PE文件

    前几天和朋友交流技术,提到手工打造微型PE文件,他说现在网上流传的大部分版本在XP SP3下都不能运行,于是心血来潮,拍着胸脯说:“你放心,忙完了帮你做一个.”后来花了半天时间,终于打造出一个XP下可 ...

  3. javascript中关于坐标 大小 的描述

    window对象 有效桌面的大小,除去桌面下面的任务栏的高度 window.screen.availHeight : window.screen.availWidth :   浏览器窗口的左上角相对于 ...

  4. ubuntu学习之一

    1终端 在右键后菜单中找到 终端,(如果没有终端,使用 Ctrl+Alt+[F1~F6] ,您可以切换到1~6号控制台,输入: sudo apt-get install nautilus-open-t ...

  5. 7 天玩转 ASP.NET MVC — 第 4 天

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 欢迎来到第四天的 MVC 系列学习中.如果你直接开始学习今天的课程,我强烈建议你先完成之前的学习内 ...

  6. 搭建jenkins环境(linux操作系统)

    一.虚拟机安装 1)  Virtualbox安装 2)  新建镜像(将已有镜像导入) 3)   开通本地远程访问虚拟机的权限 3.1 通过本地的mac地址设置本地连接固定的ip地址.子网掩码.默认网关 ...

  7. ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 区别

    ScriptManager.RegisterStartupScript方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartu ...

  8. AngularJS学习笔记2——AngularJS的初始化

    本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...

  9. Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener

    一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法是封装监听者类,用addListener()方法动态添加监听者 二.代码 1.Test.java ...

  10. C#之使用AutoResetEvent实现线程的顺序执行

    前几天一朋友问我如何实现线程的顺序执行,说真的,虽然看过CLR这本书,也把线程部分拜读了两遍,但是这个问题出来之后还是没有一个思路.今天在搜索资料的时候无意中再次看到AutoResetEvent这个东 ...