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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM