版本管理和項目管理軟件淺談
項目管理軟件
Trac vs Redmine
關於Trac,之前想為計組實驗平台搭建Wiki的時候作為“備胎”所了解過,而與當時功能與其相似,看起來更有競爭力的產品——Redmine相比而言我更加看好Trac,因為Redmine有一些嚴重的缺點:
- 安裝非常麻煩。在實際的生產環境中,Redmine在Debian\Ubuntu系統下沒法穩定運作。Redmine的依賴是固定的,所以一些新的版本庫可能沒法工作。而且必須自己在apt-get中配置更新源,否則很容易錯將某些依賴升級后Redmine就沒法用了。
- 備份方面的管理很復雜。在Trac一行就能解決的事,在Redmine里你需要單獨備份配置文件,修改過的文件以及數據庫內容。不過Redmine支持多個項目的管理,這方面來說比Trac好一些。
- Redmine的wiki功能比較差,有比較多的漏洞。
Redmine有一個優點就是其文檔管理十分簡約,直接將文件上傳到Redmine的管理平台即可。
而且雖然Redmine不好安裝,實際上Trac的安裝也不簡單,比如像必須手動創建數據庫等。
但是針對於插件系統這方面來說的話,Trac對插件的支持和兼容性要比Redmine更好一些,雖然兩者都會發生插件被孤立而不被框架支持的情況。但是Trac插件發生問題的概率更小。
TFS & Bugzilla
TFS是一個軟件開發生命周期的解決方案,相比而言SVN和Git只是用來項目源代碼的版本控制系統而已。TFS還有諸如問題追蹤、文檔管理、報告生成以及虛擬實驗、測試等功能。TFS很契合地集成到了Visual Studio中,作為VS的一大助手也發揮了很大的作用。TFS非常適合純軟件型的項目開發,而且適合基礎資源到位的情況下進行推進和開發。當然在前期需求收集和策划的時候就開始使用,也是完全沒問題的。TFS對於敏捷開發的團隊來說十分有利。
而Bugzilla是個bug tracking system,即一個開源的缺陷跟蹤系統。它可以管理軟件開發中缺陷的提交,修復,關閉等,貫穿了軟件開發的整個生命周期。這一點與TFS很相似。它也歷史變更記錄、跟蹤與描述BUG、豐富多樣的配置設定。但是和TFS比起來,它不能管理測試計划、測試用例、需求等,這一點是其不足之處。
源程序版本管理
Git vs SVN
Git是世界上最先進的分布式版本控制系統。由於上學期操作系統實驗使用過Git,所以對Git的優點和缺點有比較深的體會。
而提到Git,我們常常用來與之對比的就是SVN。
實際上類似於探討這兩個的區別的文章有很多
純粹以個人的眼光來看,我覺得Git和SVN的主要區別在於以下幾點,這幾點同時也昭示了Git和SVN的不同之處:
- Git是分布式的版本控制系統,而SVN不是。
- 分布式可以看作是Git相對於SVN在用戶體驗上感受最深的一個區別。雖然Git不是獨一家做分布式模式的版本控制系統,但是Git在這方面上做得很好,有許多強大的功能。
- Git可以做到即使沒有網絡,我們依舊可以提交文件,查看歷史版本記錄,創建項目分支以開發新的功能。在沒有網絡的環境里,SVN就只能說再見了。
- 但是這個不聯網無法使用的特性,我覺得也是SVN適合於部署在大型公司內網服務器里的原因。尤其是一些商用大型軟件的公司,除了公司內網與保密機構存儲源碼,其它地方就不可能有版本庫的克隆副本了。
- 當然分布式更多的好處不是僅僅局限於聯網的問題,分布式也相當於多層備份。比如哪一天我手一抽把遠程倉庫和本地版本庫里的東西都刪干凈了,除了使用Git強大的版本記錄還原外,還可以讓任何一個克隆過遠程版本庫的人重新推送到遠程倉庫里。這樣源碼存在的安全性將大大提高。
- Git的版本記錄是靠其強大的Hash數據,而SVN卻是按文件。
- 只要是對Git稍有研究的人就知道Git的版本回退效果之強,不僅可以穿越去過去,還能從過去再穿越回來。這樣堪稱時光機一般的技能卻只需要一個.git文件夾,很小的體積就可以存儲每一次版本的變化。
- SVN我不是很了解,但是按照其原理介紹所說,其版本控制是資源控制來操作的。將文件的元信息隱藏在.svn的文件夾里,更重要的是,.svn文件夾的體積比.git的體積要大很多,需要存儲很多的冗余信息。
- Git的分支與SVN的分支。
- Git的分支常用於單獨功能開發,開發后再跟master合並。並且常常可以使用三個分支來控制版本的stable,release,debug版本。Git的分支合並也非常簡單便捷,在有沖突,沖突合並時Git會提示明顯的信息以人工簡易合並信息。
- 但是在SVN中一個分支就類似於版本庫中的另外一個目錄,由於確認分支合並需要使用復雜的命令,所以經常會有分支被遺漏的情況。
- Git缺少容易閱讀的版本號。
- 這是Git相比於SVN缺少的一大特征。SVN的版本號是任何一個相應時間的快照,但是Git都是使用SHA-1值來唯一標識代碼快照,它們用途一致,但是相比起來SVN的版本號更容易閱讀。
Github 和 Gitlab、Gogs
Github,Gitlab都是使用Git作為分支版本控制系統的,但是它們倆的區別之處在於Github主要用於開源項目的參與與維護(當然Github有付費的企業級服務也很厲害),但是Gitlab更傾向於在內網服務器上架設的私有庫。之前在了解Gitlab的時候還找到了一個使用go
語言編寫的由無聞帶隊開發的十分輕便的一個Git私有庫。其是模仿Github和Gitlab而寫的,但是十分輕便,是個開源項目。當然重點在於它是國產的!當然拜go
所賜,其擁有優秀的跨平台性能。