PHP在之前把源代碼遷移到了git下管理, 同時也在github(https://github.com/php/php-src)上做了鏡像, 這樣一來, 就方便了更多的開發者為PHP來貢獻代碼.
今天寫這篇文章, 就是為了給在國內的同學們, 願意為PHP開源社區做貢獻的同學們, 做個示例, 如何為PHP來貢獻你的智慧.
現在, 假設你要為貢獻一個新特性, 那麼你除了要做下面的這些步驟以外, 還需要在wiki.php.net上提交一個RFC, 待會我會介紹這個, 現在讓我們先簡單點, 假設你只是要為PHP修復一個bug(一般來說, 大家可以在這裡發現PHP已經報告的bug: PHP Bugs). 現在假設你已經想好了要怎麼修復這個Bug.
1. 首先, 你需要有一個github的賬號, 沒有的話, 來這裡注冊: 注冊github.
2. Fork PHP的源代碼, 在PHP的Github頁面上的右上角有一個fork按鈕, 點它
3. Fork以後, 你就有了一份屬於你自己的PHP源代碼倉庫, 現在你就可以在這個倉庫下, 修改PHP的源代碼來為它修復Bug了.
具體開發沒什麼好說的, 不過如果對於Git的使用有問題的話, 可以參考Git使用手冊, 比如這個: ProGit
我這裡為大家提供一個簡單的說明, 如果在Github上開始開發, 在你自己的PHP代碼倉庫的頁面上, 會有一個說明, 比如在我的PHP倉庫頁面上https://github.com/laruence/php-src:
ssh [email protected]<SCRIPT type=text/javascript>
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l=document.getElementById("__cf_email__");a=l.className;if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</SCRIPT>:laruence/php-src.git
然後, 我就在本地開發環境上, 執行:
$git clone [email protected]<SCRIPT type=text/javascript>
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l=document.getElementById("__cf_email__");a=l.className;if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</SCRIPT>:laruence/php-src.git
然後, 你就得到了一個php-src目錄, 進去開發吧,
4. 等你修復完成以後, 你提交到你屬於你自己的這個PHP倉庫中, 然後, 在你的PHP源代碼倉庫的Github頁面的右上角, 會有一個pull request按鈕. 點它.
提交的時候, 請注意你的提交說明的格式, 首先第一行應該是個簡短的說明(最多79個字符), 說明你做了什麼修改. 如果一句話說不完, 就插入一個空行, 然後輸入大段的說明(參看New Commit Message Format) :
<max 79 characters short description>\n
\n
<long description, 79 chars per line>
\n
如果你是修復了一個列在bugs.php.net上的bug, 那麼你的簡短說明應該類似如下格式:
1 Fixed Bug #bug號 (Bug的描述)
5. 然後, 填寫相關的信息, Github就會給PHP的pull request郵件組發送一份包含著你的更新的Pull Request郵件(大家不用擔心你的英文, 只要你能說出來, 我們就能看懂, 當然, 如果你實在不願意寫英文, 也沒關系, 寫中文吧, 我看到了會處理, 我處理不了的, 我也會為大家翻譯).
6. 最後, 如果PHP的Committers們認為你的修復正確(有一些為PHP貢獻代碼要注意的選項, 我留在下面). 就會Merge你的Pull Request到PHP的源代碼中.
現在, 假設你要提交的是, 一個更新(添加新函數, 添加新語法), 那麼在你提交了Pull Request的同時, 你還需要往[email protected] 郵件組發送一個郵件, 來說明你為什麼要提交這個更新, 讓在這個郵件組的人們一起來討論, 幫助你完善你的想法.
最後, 在你為PHP貢獻了一些更新以後(被Committer接受的更新), 那麼你就可以嘗試在: Register Svn Accout上來申請一個你自己的PHP Developer賬號了.
附錄:
為PHP貢獻源代碼有幾點要注意的(常見的問題):
1. 只寫C89兼容的代碼, 比如, 不要用單行注釋(//), 變量的定義一定要在所有語句之前(block的開始)..
2. 變量命名, 遵循PHP已有的規范, 不要使用駝峰命名.
3. 對於一些非常小的更新, 比如代碼中有拼寫錯誤, 還是鼓勵大家到bugs.php.net上提交Patch, 畢竟Merge Pull Request有的時候會比較麻煩.
摘自 laruence