2012-06-19 46 views
6

我正在做一大堆CVS和RCS存儲庫到Subversion的轉換。我偶爾會遇到一個損壞的v文件。我已經想出瞭如何手動修復這些文件,但是它變得單調乏味,而且我的最新項目有很多損壞的文件,比我更喜歡手動修復。是否有修復RCS/CVS,v文件的工具?

所以我想有一個工具來解析RCS文件並修復它們。這可能意味着一些舊版本將不完整。例如,我已經看到1.1版缺失的情況,因此添加一個空版本並附帶註釋,說明它缺少這個技巧。

我已經做了很多搜索,試圖找到這樣的工具,但沒有出現任何東西。我即將開始編寫我自己的工具,但認爲我應該首先在這裏問問。

我知道我可以只獲取代碼快照和導入這些,我會訴諸,如果我有(只是爲了阻止這些建議:)

++感謝

+0

有什麼損害的性質和你是如何修復它? –

+0

有各種各樣的傷害。我現在面臨的最糟糕的情況是,v文件的一部分被替換爲空值(我猜測磁盤已滿,或者在過去的某個時間點磁盤出現錯誤)。我所能做的就是替換損壞的修訂版本(通常是非常舊的版本),並用空的修訂版表示它們已損壞。它不會比現在更糟糕。 – trent

回答

2

我親手做的不建議進行手動遷移,因爲該過程非常耗時,並且無法通過生成的回購庫中的完整數據/元數據設置進行手動遷移。

有一種將CVS遷移到SVN的工具,它被稱爲cvs2svn。它是一個將CVS存儲庫遷移到Subversion,git或Bazaar的工具。 您可以參考this how-to獲取快速入門建議。

檢查this出來:

CVS只是一個前端RCS和* .V文件確實是RCS 文件。只是檢查出來。例如,如果你有富,v只是執行:

co foo 

它將從v文件簽出foo。

還有一個RCS to SVN converter,你也可以嘗試一個。

+0

是的,我正在使用cvs2svn。轉換不是問題,問題在於它扼殺了損壞的v文件。手動修復它們是一個單調乏味並且容易出錯的過程,它似乎應該以某種方式自動化。 – trent

+0

我已經更新了我的答案,試試看。 :) –

+0

RCS命令也會轟炸這些文件。其中一些損壞,使得rlog失敗,但其餘的失敗,當我試圖檢查損壞所在的修訂版。我編寫了一個腳本來運行所有運行rlog的v文件,然後對每個修訂版進行合併,這就是我如何知道這種損壞非常普遍的原因。 – trent

0

我寫了一個Python庫editrcs,它將RCS文件解析爲可修改的樹,然後將其寫爲新的RCS文件。它不是爲了處理無效的RCS文件而設計的,但是如果腐敗只發生在數據部分,或者修改庫來解決任何損壞的元數據,可能是合理的起點。

而且相關的具體問題:

  1. RCS文件store軀幹和diff文件在樹幹上倒退的最新版本。因此,如果歷史性修訂的差異無法挽回地被破壞,那麼前面的任何內容都可能無法使用,或者至少是錯誤的,除非您能夠猜測出改變是什麼或者它沒有衝突。 (分支從腐敗的角度存儲爲向前 DIFF從他們的分支點,所以整個分支可能會出現問題。)

  2. 可以有效,這樣才能在修訂編號差距,如果修訂已使用「rcs -o」從RCS文件獲得removed。空 一束如果你有一堆空的其中一個版本應該是,那麼這是例如:

    # Setup 
    echo 1 > test 
    echo "initial commit" | ci -l test 
    echo 2 >> test 
    echo "2" | ci -l test 
    echo 3 >> test 
    echo "3" | ci -l test 
    
    # RCS file contains revisions 1.1, 1.2, 1.3 
    rlog test 
    
    # Remove revision 1.2 
    rcs -o1.2 test 
    
    # RCS file now contains revisions 1.1, 1.3 
    rlog test 
    
相關問題