第一次向開源專案貢獻程式碼的歷程

cotyb發表於2016-02-02

前言

這篇文章並沒有什麼高深的技術,只是自己簡單的一個歷程,以及對github的體驗,相信部落格園有很多大牛或者即將成為大牛的人,呼籲大家多多開源,共同進步。開始正文。

從我的使用角度來看,github主要有兩個功能,一個是程式碼管理,另一個則是協同開發,之前一直用的是前一個功能,將程式碼寫完之後,及時儲存,及時提交,我一直用的是windows桌面版,覺得github真心好用、方便而且操作不難,不過前幾天github也當機過。。。

在去年下半年了做了一些SDN開源控制器ryu的工作,自己修改了ryu拓撲發現的邏輯,書寫了原始碼,關於這個修改的詳細介紹可以參見我的部落格,這篇文章也得到了中國最大的sdn網路平臺,sdnlab的認可和收錄。向開源社群貢獻的第一個程式碼便由此展開。 

過程

貢獻程式碼的起因

之前做了一些關於ryu的工作,書寫了一些應用,在某次需要建立交大網路拓撲的時候,發現了ryu的拓撲發現能力有較大的侷限性(最後經過比較,發現虛擬交換機CPqD的效能比OpenvSwitch也有一定差距),所以修改了ryu拓撲發現原理,之後放在了自己的github中,發表了一些部落格,但是閱讀和程式碼使用人數十分有限。

前幾天SDN方面的一個牛人,在github上看到了我的工作,提了問題,並鼓勵我將這部分程式碼貢獻給ryu,所以激發了我第一次向開源工程貢獻程式碼的想法。

貢獻程式碼的過程

整個過程可以按照:書寫程式碼->提交merge請求->編譯檢錯->通過->。。。,因為目前只進行到了通過這一步,後面的待續,當然這整個過程都可以通過命令列來實現,這裡主要說的是客戶端。

在1月30號做完了手頭的論文相關的工作之後,修改和完善了之前的程式碼,便開始提交,簡述提交的過程:

前文提過,我用的是github Windows上的客戶端,如下圖,之前已經fork過了ryu專案,並且clone到了本地,所以直接在本地修改程式碼。

修改之後,github客戶端的changes會有提示,然後commit,同步到遠端。

之後在guthub網頁,自己的branch下,點選New pull request,進行合併,點選view pull request檢視詳細過程。

之後就會發現持續幾分鐘的編譯過程,主要包括python程式碼正確性檢測,以及最嚴格的PE8標準,由於之前的程式碼實在linux和Windows下都有編譯的,所以格式有很多問題,包括空格tab鍵混用,空行白有空格,註釋的#後面沒有空格,以及類與類之間的空行數這些問題,來回折騰了好幾遍,終於得到了如下圖所示的編譯通過。

在檢查通過之後,在發部落格前不久看了下github網站上自己commit的狀態,發現了一個問題,如下圖,即“This branch has conflicts that must be resolved”。


為解決這個問題找了些資料,最終發現是因為ryu的upstream(也就是ryu的最初建立者)commit了一些程式碼(不論是別人的pull requeest,還是merge等),證據如下圖,可以看出osrg,也就是ryu的最初建立維護者,進行了新的merge,而且和自己修改的檔案產生了衝突。


解決辦法:git fetch或者git clone獲取最新版本。

等待稽核

目前編譯通過,等待進一步的進展。

總結

開源讓開發變得簡單,開源讓我們不再重複造輪子,開源大法好。

 

相關文章