2016-12-23 62 views
0

以前從未這樣做,所以我可能只是一個noob ...我試圖將我們陳舊的CVS存儲庫遷移到GitLab,我不知道如何來處理嵌套的CVS項目。我們有很多(即大約1600個項目文件通過CVS回購)。在兩個CVS存儲庫目錄中,大約有10年的提交,總計大約21GB。如何處理大量的嵌套CVS項目

通用結構是$ client/$ product,但其中大多數包含一堆子項目 - 通常很多。

我試過到目前爲止:

  1. 單片:試圖導入較小的CVS回購 - 用完了內存上通1周第一次(通過增加內存解決)和跑出的磁盤空間第二次通過5次(由於vmware數據存儲區幾乎已滿,不能真正添加​​磁盤 - 不要問!)。

  2. 由客戶端:cvs2git在一個客戶端上完成,然後運行git --fast-import,但我注意到所有的子項目。 Git不關心合併歷史,但我們的編碼人員會。仔細閱讀git子模塊,但不確定這是我需要的,因爲整個項目通常都在同一個CVS倉庫中,而且我看到它複製了克隆項目的過程。通過項目內部的客戶:使用(2)中的產品,通過查找,尋找.project文件,遞歸CVS回購深度優先;爲每個子目錄創建一個子目錄,並在使用git --fast-import導入子項目之前對每個子目錄執行git init --bare。這花了很長時間,因爲我相信它每次都會涉及整個cvs2git blob和轉儲文件,而且我不確定我是否擁有合適的git層次結構。

因此......我不想再陷入困境,我想我會問在這裏,因爲我確信有其他人一定需要做這種事情。任何指針不勝感激。


[編輯]:感謝所有的建議和幫助,人。現在它不在我們的手中 - 他們(開發人員)決定在他們工作時逐步將CVS項目遷移,因此大多數人可能永遠不會被移動。爲了這個目的,舊的cvs將作爲只讀引用保留,並且項目將被簽入git「pristine」,因此對於任何「BG」(在git之前)歷史,它們都會引用cvs,但是對於「AG」的歷史,他們會諮詢git。

至於深度嵌套項目的問題,我給出的解釋是它涉及Java類層次結構,每個項目等同於一個類。他們的構建過程中有一些東西會自動將cvs項目轉換爲java .jar文件或類似的東西。那裏有很多java。

+0

我不知道這個建議是否適用,但過去建議首先轉換爲SVN,然後轉換爲Git。這是因爲cvs2svn和svn2git比cvs2git更好開發。 – Schwern

+0

官方的cvs2git文件說,只是直接與cvs2git。我不確定在服務器上是否有空間存儲3個存儲庫 - 我只有2 ;-)有足夠的空間問題 – andydj

+0

tigris cvs2git是cvs2svn項目的一種分支,相當於一種alomost-cvs-2-svn,然後快速導入到git中。 – Mort

回答

0

我不太清楚你在問什麼,但這裏有一些評論,希望其中的一個或多個可以回答你的問題。

  • 你想單獨將每個單獨的項目轉換爲git嗎?我無法從你的問題中得知。但是如果你這樣做,你可以複製每個項目的目錄樹並在其上運行cvs2git。 (或者甚至可能只是創建符號鏈接來節省空間,只要嵌套允許。)一次循環一個。在這種情況下,CVS的服務器端後端文件存儲的簡單性是一件幸事。

例如這樣做。請注意,您可以執行某種遞歸複製而不是符號鏈接。

/opt/cvsrepos/CVSROOT 
      /path/to/project1 
        /project2 

/opt/convertrepos/CVSROOT #dummy empty directory to fool cvs2git 
       /project1 -> /opt/cvsrepos/path/to/project1 
  • 可你剛纔複製整個CVS倉庫其他地方暫時做轉換,讓您有更多的磁盤空間和內存?
  • 無論你想創建一個單一的存儲庫還是大量單獨的存儲庫都是基於整個意見的事情,超出了stackoverflow的目的。我也不清楚這些項目是否需要對方。如果不是,那麼你在這個選擇中有更多的靈活性。
+0

謝謝 - 這真的很有用。我認爲我最大的問題是我自己只是輕微使用CVS,比如偶爾檢查FOSS項目來編譯或管理RANCID(或者是RCV?)的後端。無論如何,我並沒有真正「讓」CVS足以知道嵌套項目是否是一個大問題 - 所以我必須問開發者。麻煩的是,在CVS回購的一生中,很多人都走了,並且沒有多少人離開。但是我們仍然有積極的客戶可以向我們過去爲他們建立的軟件尋求支持。 – andydj

+0

我現在在想,也許我應該「凍結」CVS回購,並將每個項目的「頭」導入到git回購中,而無需記錄。從乾淨的石板開始。 – andydj

0

通常不可能在轉換爲git時保留集中式存儲庫中包含的所有信息,尤其是CVS等不完善的東西。所以我認爲你不應該嘗試。保留原始存儲庫以供歷史參考,並轉換爲僅git當前正在開發的項目。你甚至不需要導入整個10年,2-3年就足夠了。

+0

我已經使用底格里斯cvs2git成功地轉換了一個巨大的CVS回購與許多許多開發超過10年的歷史,一些「有趣」的標籤歷史,以及大量的分支機構和標籤。我們不得不做幾次迭代來修復我們發現的各種問題,但這完全有可能。 – Mort

+0

我認爲git repos與這個cvs是如此之深的嵌套是不常見的。我認爲這只是一種分離問題的組織習慣/政策 - 可能是因爲CVS與分佈式工作流程有關的怪癖。我開始傾向於重新開始每個項目的乾淨結賬,並且沒有歷史記錄,但保留CVS回購僅用於歷史目的。 – andydj