遷移VSS版本庫到Git:VSS2Git

jopen 11年前發布 | 48K 次閱讀 VSS2Git 版本控制系統
公司最近有意將版本控制工具從VSS和CVS切換到Git上,由于之前的項目一直是使用VSS和CVS進行版本管理,這次遷移免不了要涉及VSS和CVS版本庫向Git進行轉換的工作。

帶著這個目的,我先嘗試著找到VSS到Git遷移的可行方案,因為我之前的項目一直也是用VSS進行版本管理,相對于從沒有使用過的CVS而言,應該更容易上手一些。至于CVS如何遷移到Git會在后面進行研究。

之前在學習使用GitStack搭建Git服務器時,在其官方網站上看到一篇講如何遷移SVN版本庫到Git的 文章,文中有提到git svn命令,可見Git內部已經有了對SVN版本庫進行操作的支持,繼而順著這個思路,試著去找找有沒有支持對VSS和CVS的操作,結果發現Git沒有 對VSS的操作支持,對于CVS倒是有git cvsimport,但在Git Bash中卻不認識該命令,運行git help vcsimport也沒有相關的文檔,而使用git help vcs-migration倒是有文檔,其中也提到了git cvsimport,難道是我是在Windows上使用的Git(安裝的是msysGit 1.7.10),而在Windows上還不支持該命令嗎?不知道在Linux上的情況是怎么樣的?

這個問題暫時先擱置,先研究一下如何將原有的VSS版本庫遷移到Git上。

既然Git沒有對VSS的支持,那么VSS轉Git應該是需要第三方的工具來幫助實現這個轉換工作(該工具要讀取并分析VSS倉庫的數據,然后按照 Git版本庫的內部結構來存放之前VSS版本庫中的數據),按照這個思路,在Google上搜索了一下,果然發現有一個這樣的工具,那就是vss2git,而且是個開源的項目,很對我的胃口。

下載下來并試用了一下,結果成功將之前的一個用VSS管理的項目轉換為Git倉庫,并且之前VSS的歷史信息也被保留下來,基本是滿足了要求。

VSS版本庫到Git的遷移

打開VSS2Git,其界面就是一個對話框,在其中作一些必要的設置,主要是設置VSS版本庫所在的路徑、要轉換VSS版本庫中哪一個項目(也可以 是整個VSS版本庫中全部的項目)、轉換結果的存放位置、轉換Log存放的位置、轉換過程中創建Git提交對象時所需的email的domain等,設置 好這些之后,點擊Go按鍵即可開始VSS到Git倉庫的轉換。

遷移VSS版本庫到Git:VSS2Git

轉換所需的時間長短取決于VSS倉庫的大小,如果VSS倉庫中項目眾多,且開發的時間都比較久的話,那么完成整個倉庫的轉換應該需要的時間會比較長,但如果只是轉換其中一個項目到Git,那么時候會比較短。

轉換后,通過git log可以看到之前VSS倉庫中的歷史信息,而且這些歷史信息在Git倉庫中仍然是按照提交時間的先后來排列的。

在轉換過程中,打開存放Git倉庫的目錄,你會發現工作目錄隨著時間會在變化,這是因為VSS2Git在轉換時會先分析并收集VSS倉庫中的各種信息,然后再從VSS倉庫中記錄的最早的時間點開始Replay(演繹)整個VSS倉庫數據形成的過程。

在演繹過程中,應該是先從VSS中取出最初的版本(Git倉庫最初為一個空倉庫),并將其版本中的文件作為Git工作目錄的文件,然后按照Git先 對工作目錄進行文件快照再提交到Git倉庫的做法,按照時間順序逐個版本進行提交(提交時會取出VSS中對應版本的歷史信息),最終將VSS版本庫轉換為 Git倉庫。

上述的演繹過程是我自己初步推斷的大概過程,實際是否這么實現,請參考VSS2Git的源代碼(用C#實現的)。另外,VSS倉庫內部的數據到底是如何組織的我也沒有研究過。

要注意的幾點:

  • 如果是要將整個VSS倉庫中的所有項目都遷移到Git中,那么在VSS2Git界面的Project一項中填上$

  • 如果只是要將VSS倉庫中的某一個項目遷移到Git上,則在Project一項中應填上$/Project1(其中Project1為假設的項目名),甚至可以僅轉換子項目,這樣$/Project1/32Bit

  • VSS2Git一次要么完成VSS倉庫的整體轉換,要么只能轉換VSS倉庫中其中一個項目,這樣要實現多個項目的轉換就要多次執行VSS2Git

  • VSS2Git的每一次轉換會產生一個Git倉庫,如果是VSS倉庫一次整體轉換,則生成的Git倉庫中將包含VSS倉庫中所有的項目,這樣帶來的 問題是,由于Git倉庫中包含了所有的項目,這樣以后不同項目的開發人員無法從Git倉庫中只checkout出自己負責的那個項目文件,而是要 checkout出所有項目的文件,這樣對于公司的代碼安全是非常不利的,那么,這樣就不應該一次將VSS倉庫整體轉換,而是應該以項目為單位進行逐個轉 換,這樣,對于不同的項目,對其Git倉庫就可以為不同的開發人員設置不同的操作權限

  • VSS2Git在生成Git提交信息所需的email時,只是根據從VSS中提取出的User名加上在界面Email domain中填寫的內容組合而成,實際生成的email地址未必是有效的(不一定能用來發送email)

更多的注意事項可至VSS2Git的主頁查看。

導入現有的Git倉庫到GitStack服務器上

通過VSS2Git,我們可以將VSS倉庫中的項目逐一轉換為該項目的Git倉庫,這時我們可以將其放置到Git服務器上了,以便后續的開發和維護。

這里,我們假設使用GitStack搭建了Git服務器(如何搭建見上篇),現在的問題就相當于如何將一個現有的Git倉庫導入到GitStack搭建的服務器上。因為正常的流程是在GitStack上先創建裸倉庫,然后再向其中提交,如果這樣做的話,我們之前的VSS中的歷史信息恐怕就要丟失了,而這是我們不希望的結果。

不過幸運的是,GitStack支持導入一個現有的Git倉庫到其中,其步驟也很簡單,就是先將現有的Git倉庫拷貝至C:\GitStack \repositories目錄下面,然后登陸到GitStack上,在Repositories列表中會發現我們的Git倉庫已經在其中,但 Action欄則出現了一個綠色的安裝,而非添加用戶、查看倉庫的那些按鈕,這時我們只有點擊這個綠色按鈕就完成了該Git倉庫的導入,之后我們會發現綠 色的按鈕被正常的添加用戶、查看倉庫的那些按鈕替換掉,這時我們就可以為該Git倉庫添加用戶并設置訪問權限了。

遷移VSS版本庫到Git:VSS2Git

具體的過程,在GitStack的文檔中有詳細的闡述,請見Import an existing repository,這里不再贅述。

至此,如何將VSS倉庫遷移到Git,并將生成的Git倉庫導入到GitStack搭建的服務器上的大概過程就結束了。

(全文完)
來自:http://www.oschina.net/p/vss2git

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!