PHP項目中composer和Git的組合使用

highlight: 在國內因爲衆所周知的緣由,composer的package可能沒法訪問,解決辦法是使用中國的全鏡像:php

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

 

在須要使用composer package的地方建立composer.json:laravel

{git

  "name": "kidsit/myphppackage",github

      "type": "wordpress plugin",json

"repositories": [composer

  "type": "vcs",frontend

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

],測試

"autoload": [ui

  "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

相關文章
相關標籤/搜索