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