
引言
作為有十幾年IT行業代碼的從業人員,經歷過代碼管理工具的變遷,從早期的微軟的Source Code Control,到TFS,再到SVN,再到現在的Git。我深知代碼管理工具是代碼開發過程中非常重要的工具。市場上的代碼管理工具有很多,近期正好團隊內部在選型,我對諸如Github、Coding、阿里云效、碼云、Azure Devops等工具進行了試用評測。想著很多小伙伴可能也有工具選型方面的痛苦,就大概整理了一下發出來,幫助大家結合自己的實際情況,選擇合適自己的工具,節約大家的時間和精力。
閱讀本文共需要10分鐘左右,當然你可以選擇只閱讀“長話短說”總結部分。
長話短說
首先介紹一下Github,相信所有編程的朋友都不默認,它是世界上最流程的開源代碼庫,基于git,現在被微軟收購。個人覺得Github在所有工具中是最優秀的,這可能是有點先入為主。
然后介紹一下Coding,它提供了代碼托管、敏捷開發協同及DevOps工具鏈,讓團隊在云端高效協同,在開發協作過程中享受極致體驗,提升軟件交付質量與速度。現在有騰訊的投資。它支持Git和SVN。
再下來介紹一下阿里云效,它已經集成在阿里云中,屬于阿里系的產品,濃濃的阿里系風格。它支持Git和SVN。
再下來介紹一下碼云,它是http://OSCHINA.NET推出的代碼托管平臺,支持Git和SVN,提供免費的私有倉庫托管。據說目前有超過500萬的開發者選擇碼云。號稱是中國的Github。
最后介紹一下Azure Devops,它是微軟Azure云的產品,屬于微軟的風格。雖然微軟收購了Github,但是Azure Devops長得和Github真的不太像,感覺不是一類的。它支持Git和微軟自己的TFS。但TFS實在已經是末日黃花,即將逝去。
原本還想試用華為軟開云的,結果發現是豬八戒網的,不知道是不是華為收購投資的。發現注冊及其困難,直接放棄。最近華為是要風得風,要雨得雨,各個領域都可以看到華為的身影,但確不是每個領域都可以做得優秀。
評分表

功能方面的對比
主界面
Github

Coding

阿里云效

碼云

Azure Devops

比較這些產品的主界面,是不是發現碼云的主界面和Github的主界面非常像,不愧是中國版的Github,這點就值得加分。其他產品的排版都很雷同,感覺有點不倫不類,特別是微軟的Azure Devops,真的很失望。Coding算中規中矩,開始使用Coding還有點失望,但是比較了阿里云效,Azure Devops后,就會發現還是不錯的。
安全性
代碼管理工具,安全是非常重要的,所以我們看看他們的各自的登錄。
首先是Github,用戶名加密碼即可,這種會有撞庫的風險,起碼應該有雙因素認證,這點Github真的做得比較差。

然后看Coding,看界面就是用戶名和密碼,一樣的特性,差評

但Coding隱藏支持MFA,如果開啟MFA后,登錄后就會提示輸入MFA的6位Code,這樣是非常安全的。這個要加分。

接著看阿里云效,支持掃碼登錄和賬號登錄。掃描登錄是需要支付寶或者釘釘掃描認證的,非常安全。但是賬號認證就是直接用戶名加密碼,這種方式有被撞庫的風險。

再看碼云,簡單的用戶名加密碼,這種方式是不安全的。

最后看Azure DevOps,集成的Azure的認證,看起來是用戶名和密碼,但后臺接管的是零信任模型,必要時會要求你輸入手機驗證碼的,是支持雙因素的,這個方式是安全的,而且是經過市場檢驗的。

所以以上產品,登錄模塊的安全性最好的是Azure DevOps和Coding,然后是阿里云效,阿里云效是否集成了零信任模型不知道,這個經驗不會很多。最差的是Github和碼云。
創建新項目
首先是Github,它支持Private和Public兩種模式,默認是Public,這個就不是一個很安全的做法,應該默認是Private比較好。可以選擇是否生成初始化的README文件,這個很好。然后支持.gitignore文件,而且它顯示支持None,并且默認是None。這個就不會出現選擇了一個模式,如Python,然后又想清理這個選擇時發現不能清理的尷尬。另外它還支持選擇License,這個開源軟件必須的。

接著是Coding,沒有這個Public/Private的選擇項,但有個很小的復選框選擇是否公開代碼,這個設計就覺得有點很奇怪,更喜歡Github的樣式,然后它支持Git和SVN,你可以選擇任意一個,默認是Git。然后是預置代碼模板初始化倉庫和啟動ReadMe.md文件初始化項目二選一,但是是奇葩的復選框。這個時候是不是應該是圓點的單選框比較好。然后都沒有默認預置None的選擇項,選擇之后想清除你會發現找不到地方,這個是非常不人性化的。

接著是阿里云效,支持私有和企業內公開兩種,不支持完全公開。默認選擇私有,這個做法是安全的。支持是否創建README.md文件,但只有兩個選擇內置新手引導和空模板,默認是空模板,沒有語言選擇,沒有License,非常簡單的選擇。但我更喜歡Github的可定制化。

接著是碼云,樣式與Github高度一致,也是支持Private和Public兩種模式,默認是Private,這點比Github安全。也支持語言和.gitignore的樣式,但是沒有None選項,默認是空,一旦選擇了也是遇到不能清除的尷尬。接著又多了初始化README,初始化issue template和初始化Pull Request Template的選項,感覺有點多余。還有一個選擇Branch的模式,也是感覺很復雜,不太實用。

最后是Azure Devops,微軟的功能好像更加簡單。首先是讓你選擇Private還是Public,默認是Private,這個安全不錯。接著在高級隱藏著兩個選擇項,一個是Version Control的選項,默認是Git的,你還可以選擇TFS。TFS已經慢慢被淘汰了。另一項是工作流樣式,默認是Basic,其他沒有測試。

比較以上幾種軟件,Github是最好的,但是Github默認選擇Public是安全硬傷。碼云也不錯,基本和Github一樣,而且默認選擇Private,這個是非常好。但是選項沒有內置None,這個是Bug。其他的不說了,希望能夠向Github和碼云學習。
代碼倉庫的訪問
所有的平臺都支持Https和SSH的兩種模式,我更喜歡SSH這個模式,不需要輸入代碼,而且私鑰更加安全。
先看Github的,非常簡單的Title和Key,不支持過期時間設置。

然后看Coding,除了公鑰名稱和公鑰內容外,支持公鑰有效期,這個安全性更好。

接著看阿里云效,也是簡單的標題和密鑰,而且和順序顛倒,看起來很別扭。

接著看碼云,簡單的Titile和Key,與Github一樣,不支持過期時間。

最后看Azure Devops,簡單的Name和Key,不支持過期時間。

比較上述產品,Coding的SSH Key設置支持過期時間,更加安全,其他的都差不多,但是阿里云效的界面最丑陋。
代碼編輯和瀏覽
實際上很少有開發人員愿意在Github等平臺上直接編輯和瀏覽代碼的,更愿意使用專業的VSCode等工具。所以這個功能我覺得哪個平臺說它做得多么的優秀都是徒勞的。因為與開發者的習慣不一致。因為這幾個平臺都支持Git,都可以很好地與VSCode集成,所以沒有太多要說的。
代碼搜索
這個是Github一個非常好的功能。先看Github,輸入文件名或者代碼后,就可以檢索出相關內容

接著看Coding,很遺憾,Coding沒有這個功能。
再接著看阿里云效,可以搜索對應的文件名,比Github差遠了。

接著看碼云,也沒有發現這個功能,非常遺憾。
最后看Azure Devops,有類似功能但居然搜索不到結果,差評。

綜上比較,Github是最優秀的,阿里云效有相關的功能,但是效果一般。Azure Devops功能就不能用,不知道是什么原因,其他的就沒有這個功能。我個人覺得這個功能是非常有用的。
刪除項目
各個產品的刪除Project的功能都比較正常。Coding的刪除Project功能需要進行MFA認證,比較安全,這點值得推薦。安全性上,Coding是做得不錯的,第一個實現了MFA的認證。
代碼質量分析
現在隨著SSDLC和DevSecOps的深入人心,大家更愿意將安全左移,根據IBM的理論,問題越早發現越早修復,代價就越小。所以代碼質量分析就很重要。
首先看Github,并沒有集成代碼分析功能。
接著看Coding,它在代碼倉庫的頁簽下面專門有個代碼分析的頁簽。代碼分析支持多個參數,如代碼問題、圈復雜度、代碼行數等指標,支持增量掃描和全量掃描兩種模式,支持多種語言。

新建代碼分析支持新分支或者新代碼庫。然后選擇新代碼庫后,出現這個界面,要求你自己選擇代碼的語言,即系統不能自動識別你使用了什么代碼,這個和專業的代碼掃描工具Checkmarx還是有差距。

阿里云效自動集成了安全掃描功能,不需要額外配置,主要支持兩種掃描:敏感信息檢測和依賴包漏洞檢測。

我加了一個Password的代碼并且打印出來,但是敏感信息中并沒有檢測出來,所以我也很懷疑這個檢測的結果。
碼云,不支持代碼分析這個功能。 Azure Devops,也不支持代碼分析這個功能。
最后總結一下,相對而言,Coding的代碼分析功能更全面,但Coding沒有集成依賴包漏洞檢測,即通常說的OSA分析。而阿里云效支持OSA分析,但實際上沒有代碼靜態分析,只能一個敏感信息檢測。而Github、碼云、Azure Devops沒有這個功能。
代碼容量
Github是免費的代碼管理平臺,容量是無限大的,從沒有聽過有限制。Coding是以團隊大小限制的,代碼容量也沒有限制,和Github一樣。阿里云效的容量也沒有限制。碼云的代碼容量也是沒有限制,最后看Azure DevOps,代碼的容量也沒有限制。所以五個平臺對于開發者都是友好的,代碼容量都是無限制的。
與DevOps流程的集成
Github是個純粹的代碼管理平臺,并沒有直接與其他DevOps流程進行整合。但相信其他平臺也很容易整合Github。
Coding,本身就是DevOps的平臺,支持持續集成和持續部署。其中持續集成包括構建計劃和構建節點。而持續部署支持Kubernetes、云服務器和靜態網站。這些功能部分免費,絕對部分是要收費的。不過你選擇項目的時候,必須是DevOps項目,而不是純粹的代碼托管項目。

阿里云效,沒有看到有直接持續集成和持續部署的頁面,估計會和阿里云其他組件進行集成,這里不進行分析。
碼云,也集成了DevOps功能,包括Baidu云和Jenkins For Gitee兩種選擇。

Azure DevOps通過Pipeline也集成部分DevOps功能

總上所述,Coding,碼云,Azure DevOps集成或者部分集成了DevOps功能,阿里云效和Github沒有直接集成。Coding更加直接,直接看到持續集成和持續部署,而碼云感覺是依賴于百度云或者Jenkins進行集成,Azure靠自己的Pipeline集成,沒有這么直接。
國內代碼拉取速度
由于眾所周知的因素,一些國外協作類工具的訪問速度非常不樂觀,如果你不希望團隊浪費時間在等待頁面加載,等待代碼提交/拉取的漫漫長夜中,這將是你首要需要考量的因素。
這點上,Coding,碼云,阿里云效都部署在國內,速度明顯占優勢。而Github和Azure Devops都差強人意。
總體的評測結果
如果把測評表5星換算為5分,沒有此功能為0分,進行加權平均后得到各個產品的得分。

得分最高的Coding,3.36分,其次是碼云,2.8分,接著是阿里云效,2.45分,接著是Github,2.45分,最差是Azure Devops,2.27分。
如果去掉國內拉取代碼速度(不可控因素)和倉庫容量,計算結果如下:

其中排名第一是Coding,3分,然后碼云2.56分,接著是Github,2.33分,再接著是微軟2.11分,最差是阿里云效,2分。
如果你對安全很重視,那可以參考這個表格

其中排名第一是Coding,3.8分,然后是碼云2.8分,然后阿里云效和Azure DevOps,并列2.6分,最差是Github,2.2分。所以Github只是最流行的公開倉庫,其安全性并不是強項。