SVN
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,是集中式管理的版本控制器,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。 SVN的特點是簡單,只需要一個能放代碼的地方就OK了。SVN只有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的人們都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。
Git
Git每一個終端都是一個倉庫,客戶端並不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。每一次的提取操作,實際上都是一次對代碼倉庫的完整備份。 小編總結的一些最常用的Git命令(全名,沒用alias之前):
git checkout
git status
git checkout -b
git commit
git diff
git add
git clean -fdx
git fetch --prune
git pull --ff-only
git branch -D
git push
git merge
git rm
git rebase
git reset
git revert
git push origin :yourbranch
GitLab
GitLab 是一個用於倉庫管理系統的開源項目。使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務。
可通過Web界面進行訪問公開的或者私人項目。它擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和註釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。團隊成員可以利用內置的簡單聊天程序(Wall)進行交流。它還提供一個代碼片段收集功能可以輕鬆實現代碼複用。
GitHub
gitHub是一個面向開源及私有軟件項目的託管平臺,因為只支持git作為唯一的版本庫格式進行託管,故名gitHub。
gitHub於2008年4月10日正式上線,GitHub可以託管各種git庫,並提供一個web界面,但與其它像 SourceForge或Google Code這樣的服務不同,GitHub的獨特賣點在於從另外一個項目進行分支的簡易性。還提供了訂閱、討論組、文本渲染、在線文件編輯器、協作圖譜(報表)、代碼片段分享(Gist)等功能。為一個項目貢獻代碼非常簡單:首先點擊項目站點的“fork”的按鈕,然後將代碼檢出並將修改加入到剛才分出的代碼庫中,最後通過內建的“pull request”機制向項目負責人申請代碼合併。
碼雲
碼雲是開源中國社區2013年推出的基於 Git 的完全免費的代碼託管服務,這個服務是基於 Gitlab 開源軟件所開發的,我們在 Gitlab 的基礎上做了大量的改進和定製開發,目前已經成為國內最大的代碼託管系統,致力於為國內開發者提供優質穩定的託管服務。
碼雲的主要功能是除了提供最基礎的 Git 代碼託管之外,還提供代碼在線查看、歷史版本查看、Fork、Pull Request、打包下載任意版本、Issue、Wiki 、保護分支、代碼質量檢測、PaaS 項目演示等方便管理、開發、協作、共享的功能。
Git和SVN的區別
GIT不僅僅是個版本控制系統,它還是個內容管理系統(CMS),工作管理系統等。如果你是一個具有使用SVN背景的人,你需要做一定的思想轉換,來適應GIT提供的一些概念和特徵。
1.GIT是分佈式的,而SVN不是。GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。需要做一點聲明,GIT並不是目前第一個或唯一的分佈式版本控制系統。還有一些系統,例如Bitkeeper, Mercurial等,也是運行在分佈式模式上的。但GIT在這方面做的更好,而且有更多強大的功能特徵。
GIT跟SVN一樣有自己的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每個開發人員從中心版本庫/服務器上chect out代碼後會在自己的機器上克隆一個自己的版本庫。可以這樣說,如果你被困在一個不能連接網絡的地方時,就像在飛機上,地下室,電梯裡等,你仍然能夠提交文件,查看歷史版本記錄,創建項目分支等等。對一些人來說,這好像沒多大用處,但當你突然遇到沒有網絡的環境時,這個將解決你的大麻煩。
同樣,這種分佈式的操作模式對於開源軟件社區的開發來說也是個巨大的恩賜,你不必再像以前那樣做出補丁包,通過email方式發送出去,你只需要創建一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,而且不會在傳輸過程中丟失。GitHub.com就是一個這樣的優秀案例。
2.GIT把內容按元數據方式存儲,而SVN是按文件。所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾裡。如果你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。因為,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標籤,分支,版本記錄等。
3.GIT分支和SVN的分支不同。分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。如果你想知道是否合併了一個分支,你需要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合併。 然而,處理GIT的分支卻是相當的簡單和有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未被合併的分支,你能簡單而快捷的合併這些文件。
4.GIT的內容完整性要優於SVN。GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
Git和GitHub、GitLab
GitHub、GitLab是基於web的Git repositories(倉庫)。 GitLab模仿GitHub,GitLab擁有GitHub擁有的一切,還擁有更多的安全性和靈活性。
GitLab擁有GitHub擁有的一切,但他擁有更多——讓團隊對它們的repositories擁有更多的控制,它的特色:
- 非常便捷的用戶界面,在同一界面上獲取到:projects,最近的projects,用戶,最近的用戶,群組和狀態;
- 允許設置倉庫權限是公用的還是私有的;
- “Snippet support”讓用戶分享一個project的部分代碼,而不是整個project。
- 受保護的分支是一種提升代碼安全性的新方法,它們允許用戶設置project的獲取權限,所以一個團隊中只有特定的人可以push,force push或者刪除一個分支的代碼。
- Authentication levels更進一步的提升安全性,允許用戶給人讀寫以外的權限。舉例來說,你可以給一個組員跟蹤變動的權限卻不給他獲取代碼的權限。
- 你可以設置獲取到團隊的整體的改進進度,而不是你個人的進度。
- 開發者通過打上“仍在進行中”狀態標籤讓其他成員知道代碼沒有完成,從而阻止未完成的代碼合併到其他的代碼中
- “innersourcing”公司的資源如果員工不再權限範圍內,將不知道這個資源的存在。
碼雲和GitHub
碼雲的服務器在國內,在國內訪問速度比github快很多,可以免費讓自己的倉庫他人不可見,但是否安全就不知道了。訪問速度很快,支持svn,git兩種方式,免費賬戶同樣可以建立私有項目,而github上要建立私有項目必須付費。
分享 IT 技術和行業經驗,請關注- 。
閱讀更多 技術學派 的文章