Douban CODE 是豆瓣開發的一個基於 git 版本控制系統的協做平臺。git
代碼訪問:https://github.com/douban/code
github
CODE —— C: Community O: Original D: Developer E: Eldamarweb
目前 CODE 僅開放了一個框架,支持:安全
clone & push project 框架
create project 工具
create user 學習
準備環境測試
MySQL fetch
Memcached spa
Python >= 2.7
pip >= 1.4.1
virtualenv
git
CODE 爲每一個項目設置了三個角色,分爲 owner(有所有權限)、committer(有 push 和 merge 權限)、member。review 機制根據項目的不一樣設置了不一樣的規則,如產品線級別的、須要對外發布的項目,基礎庫等項目都須要通過嚴格的 review,如東西團隊對 review 設置了以下規則:
尊重他人,就事論事,對事不對人,畢竟每一個人都寫過爛代碼;
PR 中的每個 commit log 都應該能夠和代碼對應,方便 review;
儘可能不要發太大的 PR,以避免引發 reviewer 的恐慌;
建議保證一個 PR 的粒度和專一,最好不要出現一個 PR 裏又有重構又加新 feature 的狀況,一樣容易引發 reviewer 的恐慌;
提 PR 以前請確保在本地或測試環境一切正常;
reviewee 若是接受 reviewer 提出的修改意見,須要在修改提交之後知曉 reviewer,常見的作法能夠是在 review comment 處回覆(並帶 commit 連接);
評論中至少出現一個 lgtm 且保證 ci 經過以後 PR 才能夠被合併;(注:lgtm 即 looks good to me 的縮寫)
PR 合併者與提交者不能是同一我的;
PR 需從一個特定分支(分支的名字儘可能能表達代碼的功能)發往上游的 master 分支;
Model 的部分,如不緊急須要unittest;
Web 的部分,如不緊急須要webtest;
PR 合併後如引發 bug 或功能異常,並經查確爲此 PR 引發,提交者需請全組攻城溼喝飲料或吃冰棍(由被請者決定);
將 fork 的倉庫與上游同步時,應使用 git fetch upstream && git rebase upstream/master (或 code sync -r ),而不是 git merge 或 code sync (這裏code是指面向 CODE 系統的一個命令行工具),以保持清晰的提交歷史,並防止覆蓋他人的修改;
注意安全問題,對於 SQL 拼字符串,模版中有 |n 的,以及處理用戶輸入等地方都須要仔細review,更多請參考 Web 安全開發指南
對於鬆散或娛樂性項目、小工具項目,並不會那麼嚴格的 review,這也取決於 owner 本身,他能夠借這個項目尋找到一位導師,來幫助他進行 review:
舉一個具體的例子,例如東西團隊的 Android 版本的開發,實際上最開始只是團隊內部的一些成員想學習 Android 開發自發組織起來的,但一開始就找了移動組的同窗來隨時幫助 review。
對於 CODE 項目自己,全部工程師均可以向 CODE 上的任意項目提 PR,也均可以是CODE 的 reviewer,同時全部工程師的代碼都須要通過 review 纔會被 merge 到 master 分支。
發展到如今,豆瓣的 review 基本上都是自發,不多遇到須要 review 的代碼堆積的狀況。代碼討論區裏聽說時不時會出現美女圖,這多是刺激工程師們去 review 的因素之一;另外,CODE 系統自己也有獎勵機制,鼓勵你們去評論別人的代碼。
CODE 系統的獎勵機制主要有積分和勳章這兩個部分。積分的規則主要就兩個:
提交的 PR 被 merge,增長 100 點積分
提交的 PR 被評論,增長 5 點積分
目的就是鼓勵多發 PR。通常來講,小 PR 要好過大 PR,不過有時候開發任務比較緊的時候,發出比較大的 PR 也是在所不免。
勳章系統在 CODE 早期階段就作了進去,早期的獎勵規則主要跟代碼提交相關,例如給開源項目發過 Patch 並被 merge 會有相應的徽章。如今 CODE 團隊對勳章系統有一些新的規劃:
目前但願徽章系統能夠獨立出來,只是一套獨立的API,任何人任何產品線均可以去設置本身的獎勵規則,讓這種獎勵變成不是一種公司行爲,而是更小的行爲。 例如 antispam 組,可能就會有百人斬徽章,這個對於其餘組可能就不是那麼必要,固然若是你跨界幫助過 antispam 組,那麼也有可能會得到這個徽章。
CODE 上沒有設置懲罰機制。
相比 Github,CODE 有一些很是實用的地方,好比在提交代碼入庫以前能夠先在 CI 裏面完成自動測試,reviewer 能夠直接看到代碼測試是經過(綠色)仍是失敗(紅色);代碼完成 merge 以後還能夠經過 DAE 直接往線上部署。持續集成、自動測試、監控、部署這些都是獨立系統,與 CODE 都是靠 API 來進行交互。