如何貢獻我的源代碼
===
此文檔介紹了 ThinkPHP 團隊的組成以及運轉機制,您提交的代碼將給 ThinkPHP 項目帶來什么好處,以及如何才能加入我們的行列。
## 通過 Github 貢獻代碼
ThinkPHP 目前使用 Git 來控制程序版本,如果你想為 ThinkPHP 貢獻源代碼,請先大致了解 Git 的使用方法。我們目前把項目托管在 GitHub 上,任何 GitHub 用戶都可以向我們貢獻代碼。
參與的方式很簡單,`fork`一份 ThinkPHP 的代碼到你的倉庫中,修改后提交,并向我們發起`pull request`申請,我們會及時對代碼進行審查并處理你的申請并。審查通過后,你的代碼將被`merge`進我們的倉庫中,這樣你就會自動出現在貢獻者名單里了,非常方便。
我們希望你貢獻的代碼符合:
* ThinkPHP 的編碼規范
* 適當的注釋,能讓其他人讀懂
* 遵循 Apache2 開源協議
**如果想要了解更多細節或有任何疑問,請繼續閱讀下面的內容**
### 注意事項
* 本項目代碼格式化標準選用 [**PSR-2**](http://www.hmoore.net/thinkphp/php-fig-psr/3141);
* 類名和類文件名遵循 [**PSR-4**](http://www.hmoore.net/thinkphp/php-fig-psr/3144);
* 對于 Issues 的處理,請使用諸如 `fix #xxx(Issue ID)` 的 commit title 直接關閉 issue。
* 系統會自動在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上測試修改,其中 HHVM 下的測試容許報錯,請確保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的語法規范;
* 管理員不會合并造成 CI faild 的修改,若出現 CI faild 請檢查自己的源代碼或修改相應的[單元測試文件](tests);
## GitHub Issue
GitHub 提供了 Issue 功能,該功能可以用于:
* 提出 bug
* 提出功能改進
* 反饋使用體驗
該功能不應該用于:
* 提出修改意見(涉及代碼署名和修訂追溯問題)
* 不友善的言論
## 快速修改
**GitHub 提供了快速編輯文件的功能**
1. 登錄 GitHub 帳號;
2. 瀏覽項目文件,找到要進行修改的文件;
3. 點擊右上角鉛筆圖標進行修改;
4. 填寫 `Commit changes` 相關內容(Title 必填);
5. 提交修改,等待 CI 驗證和管理員合并。
**若您需要一次提交大量修改,請繼續閱讀下面的內容**
## 完整流程
1. `fork`本項目;
2. 克隆(`clone`)你 `fork` 的項目到本地;
3. 新建分支(`branch`)并檢出(`checkout`)新分支;
4. 添加本項目到你的本地 git 倉庫作為上游(`upstream`);
5. 進行修改,若你的修改包含方法或函數的增減,請記得修改[單元測試文件](tests);
6. 變基(衍合 `rebase`)你的分支到上游 master 分支;
7. `push` 你的本地倉庫到 GitHub;
8. 提交 `pull request`;
9. 等待 CI 驗證(若不通過則重復 5~7,GitHub 會自動更新你的 `pull request`);
10. 等待管理員處理,并及時 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。
*若有必要,可以 `git push -f` 強行推送 rebase 后的分支到自己的 `fork`*
*絕對不可以使用 `git push -f` 強行推送修改到上游*
### 注意事項
* 若對上述流程有任何不清楚的地方,請查閱 GIT 教程,如 [這個](http://backlogtool.com/git-guide/cn/);
* 對于代碼**不同方面**的修改,請在自己 `fork` 的項目中**創建不同的分支**(原因參見`完整流程`第9條備注部分);
* 變基及交互式變基操作參見 [Git 交互式變基](http://pakchoi.me/2015/03/17/git-interactive-rebase/)
## 推薦資源
### 開發環境
* XAMPP for Windows 5.5.x
* WampServer (for Windows)
* upupw Apache PHP5.4 ( for Windows)
或自行安裝
- Apache / Nginx
- PHP 5.4 ~ 5.6
- MySQL / MariaDB
*Windows 用戶推薦添加 PHP bin 目錄到 PATH,方便使用 composer*
*Linux 用戶自行配置環境, Mac 用戶推薦使用內置 Apache 配合 Homebrew 安裝 PHP 和 MariaDB*
### 編輯器
Sublime Text 3 + phpfmt 插件
phpfmt 插件參數
```json
{
"autocomplete": true,
"enable_auto_align": true,
"format_on_save": true,
"indent_with_space": true,
"psr1_naming": false,
"psr2": true,
"version": 4
}
```
或其他 編輯器 / IDE 配合 PSR2 自動格式化工具
### Git GUI
* SourceTree
* GitHub Desktop
或其他 Git 圖形界面客戶端
- 說明
- git配置
- git與github的關系
- 基礎概念
- git命令
- git init
- git status
- git diff
- git log
- git reflog
- git add
- git commit
- git reset
- git checkout
- git rm
- git stash
- git remote
- git push
- git clone
- git branch
- git fetch
- git merge
- git rebase
- git pull
- git tag
- 建立版本庫
- 分支合并
- 遠程庫別名
- Pull requests
- 擴展知識
- 功能文件
- 差異看法
- 注意細節
- github移動端
- git工作系統理解
- 倉庫嵌套問題
- 倉庫的使用問題
- 常用命令
- 學習資料
- 學習總結
- 示例文件
- README.md
- CONTRIBUTING.md
- .gitignore
- coding
- 大小寫問題
- 如何貢獻
- 使用賬號密碼clone
- git目錄分析
- HEAD
- 代碼部署問題
- 開發流程
- 指定公鑰文件