當前位置:
首頁 > 最新 > 從SVN到Git最強指南

從SVN到Git最強指南

對於軟體開發人員來說,版本控制系統他們再熟悉不過了,所謂版本控制系統就是軟體項目開發過程中用於儲存開發人員所寫代碼所有修訂版本的軟體。它的主要目的是實現開發團隊並行開發、提高開發效率,對軟體開發進程中文件或目錄的發展過程提供有效的追蹤手段,保證在需要時可回到舊的版本,避免文件的丟失、修改的丟失和相互覆蓋,從而減輕開發人員的負擔,節省時間,同時降低人為錯誤。而目前常見的版本控制系統分為集中式版本控制系統和分布式版本控制系統兩種。 /

SVN和Git

在集中式版本控制系統中,目前比較常用的是SVN,而說起SVN就不能不談CVS,CVS是一個C/S系統,主要在開源軟體管理中使用。多個開發人員通過一個中心版本控制系統來記錄文件版本,從而達到保證文件同步的目的。CVS版本控制系統是一種GNU軟體包,主要用於在多人開發環境下的源碼的維護。但是由於CVS編碼存在一些問題,大多數軟體開發公司都使用SVN替代了CVS。SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。

而在分布式版本控制系統中,Git逐漸佔據了上風,目前,國外最大的社交編程及代碼託管網站Github,Bitbucket,Gitlab,國內的碼雲、Coding、華為軟體開發雲(DevCloud)中的配置管理等代碼託管平台均支持Git。Git是一款免費、開源的分布式版本控制系統,可以有效、高速的處理從很小到非常大的項目版本管理。Git是Linus Torvalds為了幫助管理Linux內核開發而開發的一個開放源碼的版本控制軟體。Torvalds 開始著手開發 Git 是為了作為一種過渡方案來替代 BitKeeper,後者之前一直是Linux內核開發人員在全球使用的主要源代碼工具。開放源碼社區中的有些人覺得BitKeeper 的許可證並不適合開放源碼社區的工作,因此Torvalds決定著手研究許可證更為靈活的版本控制系統。儘管最初Git的開發是為了輔助Linux內核開發的過程,但是我們已經發現在很多其他自由軟體項目中也使用了Git。

而隨著擁有分布式版本控制系統優勢的Git的快速發展,越來越多的開發者準備從集中式版本控制系統SVN遷移到Git上,這其中,Git相對SVN表現出來的更有利於開發者版本控制管理的特點自然是最重要的原因。

Git vs. SVN

因為從屬於不同的集中和分布式模式,因此,從工作模式來看,Git和SVN存在著比較明顯的不同,如圖1所示。

集中式版本控制系統工作模型 分布式版本控制模型

從兩者的工作模式可以看到,分布式相比於集中式的最大區別在於開發者可以提交代碼到本地,每個開發者通過克隆(Git clone),在本地機器上拷貝一個完整的Git倉庫。而SVN則必須將代碼提交到中心控制器。而由此產生的差異性,則決定了Git和SVN的各自的特性。

安全性

首先在安全性方面,由於採用分布式系統,每個用戶就相當於一個Git庫的備份,同時,通過SHA1哈希保證數據的完整性,防止惡意篡改,因此,具有很高的安全性。而SVN由於採用集中式,因此,所有代碼版本庫均存儲在中央伺服器中,因此,存在很大的單點故障的風險,同時,當伺服器端歷史數據被篡改時,客戶端難以發現。

分支功能

在分支功能方面,由於Git採用本質上指向Commit對象的可變指針,因此,便於查詢和追溯分支間的提交歷史,並能夠支持雙向合并。而SVN分支不支持提交隔離,雖然一次提交可同時更改主線和分支的內容,但無法查詢和追溯分支間的提交歷史。

發布控制

在Git中,可以設置只有發布管理員才有許可權推送的版本庫或者分支,用於穩定發布版本的維護,還可以設置只有項目經理、模塊管理員才有權推送的版本庫或者分支,用於整合測試,因此,發布控制相當靈活,而SVN並沒有明確的發布控制配置,更多的還是依靠用戶自己的習慣。

開發審核

在開發審核方便,Git支持團隊成員自建分支和版本庫。通過合并請求或從成員個人版本庫、分支獲取提交,從提交說明、代碼規範等方面對提交逐一審核。而SVN則不具備這些功能。

合并支持

Git基於DAG(有向非環圖)的設計比SVN的線性提交提供更好的合并追蹤,避免不必要的衝突,提高了工作效率。而Git基於對內容的追蹤而非對文件名追蹤,所以遇到一方或雙方對文件名更改時,能夠很好進行自動合并或提供工具輔助合并。而SVN遇到同樣問題時會產生樹衝突,解決起來很麻煩。

因此,從以上的對比可以看出,Git相對於SVN具有不少的優勢,因此,從SVN遷移到Git成為了眾多開發者的選擇。

從SVN到Git

那麼,從SVN到底如何切換到Git呢?實際上,方法有很多種,也都並不是很複雜,其中,CSDN博主UrChen提供了一種切換的方法,只需要簡單的幾步,即可完成從SVN完美切換到Git。

1.使用git svn clone 拷貝SVN倉庫

cd ~/test_repo

git svn clone file:///home/***/Desktop/SVN/svn_repo/ -T trunk -b branches -t tags

2.新建一個Git的bare倉庫

cd ..

mkdir test.git

cd test.git

git init --bare

3.將Git的默認分支和SVN的默認分支trunk對應起來

git checkout trunk

4.將test_repo推送到test.git中

cd ~/test_repo

git remote add bare ~/test.git

git push bare

此時就完成了推送,可以刪除test_repo了

5.將Git repo中的trunk重命名為master

cd ~/test.git

git branch -m trunk master

6.將SVN repo中的tags移動到git repo的相應位置

使用git svn clone導出版本庫的時候會將svn中的tags保存成git中的tags/**,而並不是默認的tag,所以要進行移動。(注意:此腳本僅示例tag是單級目錄的情況,如果 tag 是包含目錄的兩級或者多級tag,請自行重新撰寫腳本)

cd ~/test.git

git for-each-ref --format="%(refname)" refs/heads/tags |

cut -d / -f 4 |

while read ref

do

git tag "$ref" "refs/heads/tags/$ref";

git branch -D "tags/$ref";

done

7.完成遷移,得到test.git

進入工作文件夾,執行

git clone ~/test.git

OK,大功告成,使用Git進行版本管理吧。

除此之外,還有幾個問題需要說明:

1、通過git-svn工具可以在SVN遷移到Git上,保留倉庫歷史記錄。

2、切換到Git後推薦策略建議採用長期分支、特性分支。

3、目前Git還沒法做到像SVN中對特定文件夾的細分許可權控制,但可通過分倉或建立多分支的方式引導用戶使用。

4、切換到Git後遇到合并衝突時,分兩種情況:

類型1:修改了同一個文件的同一行

解決方法:確認正確的修改,然後用命令行解決,示例如下:

類型2:文件被重命名為不同的名字(樹衝突)

解決辦法:確認哪個名字是正確的,刪除錯誤的,示例如下:

DevCloud與Git

前面已經說過,華為軟體開發雲(DevCloud)中的配置管理服務全面支持Git,並對Git進行了全面優化。而實際上,這個配置管理服務就是面向軟體開發者提供的基於Git的在線代碼託管服務。對於管理員和項目經理,它提供了倉庫管理、許可權管理、成員管理、分支保護、安全管控及統計服務,對於開發者,它則提供了代碼託管、代碼倉庫、在線客戶端等服務。配置管理服務的產品架構圖,如圖所示:

DevCloud的配置管理服務對Git的優化主要體現在以下幾點:

1)支持跨地域協同開發、本地離線操作、代碼合入評審。

2)支持在線客戶端、代碼在線瀏覽、修改、提交、在線創建分支、比較分支、新建合并請求。

3)具有代碼加密傳輸、倉庫許可權管理、分支保護等多種安全措施。

4)提供了大量的倉庫模板、通用模板,以方便開發者提高創建效率。

5)提供基於代碼的統計分析、倉庫提交信息統計、貢獻者統計等相關統計數據。

總結

總之,從SVN切換到Git目前來看,是利多弊少,也是一個趨勢,建議有條件的開發人員可以嘗試一下,此外,DevCloud中的配置管理針對開發人員使用Git做了大量的優化工作,感興趣的朋友也可以登錄http://www.hwclouds.com/devcloud/網站下載試用,體驗一把用優化了的Git進行版本控制的感受!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 天極網 的精彩文章:

中端存儲又一力作 戴爾新款SC5020發布
豬隊友:量產版i8手機殼曝光 確認部分設計
首銷就霸榜!OPPO R11京東銷量排行第一
華為首款全面屏旗艦曝光:下半年將正式推出
雙電池設計 mifo U5plus打造長續航藍牙耳機

TAG:天極網 |

您可能感興趣

在 Windows 搭建 SVN 服務
在Win2003伺服器上安裝VisualSVN時遇到的問題
JMeter+Ant+Jenkins+SVN 介面自動化環境搭建
使用 Python 一鍵配置 SVN 賬號和屬組信息
svn 下載 github 上的單個目錄或文件
搭建SVN伺服器
linux下搭建svn伺服器
SVN 安裝與使用總結
svn伺服器部署