【SVN】 一次SVN 修復筆記


同事亂提交了一個版本之后,SVN上最新版本出現了問題。

原本按照網上其他人的說法,可以手動到服務器端干掉最新版的存檔,並修改版本記錄到前一個版本號即可,但是這應該是個坑。

掉進這個坑后,需要解決,又不能直接讓大家提交新版本到新庫,因為很多代碼還沒來得及同步。

好在SVN能通過不復雜的命令操作解決問題。

過程很簡單, 導出正確的版本,重建新庫。

【下列操作均在對應項目的Repo文件夾內進行】

進入db文件夾:

導出前需要手動檢查 Current文件中的版本號,是否與 revs/0/下最大號碼的文件一致。

 

此外,還需要檢查 txn-current 文件內版本號與 revprops/0/文件夾下最大號一致

檢查之后在CMD下進入svn安裝路徑,鍵入命令:

svnadmin dump [Old Repo PATH] > [New Repo PATH]

如果要導出特定版本:

svnadmin dump -r [Version.]  [Old Repo PATH] > [New Repo PATH]

【注意,版本號-1才是此處的版本參數。】

 

之后重建即可:

svnadmin create PATH  [New PATH]  

svnadmin load PATH < [New Repo PATH]

 

【當然,組內習慣性的進行正確合理的版本管理工作流程才是王道】

 

【附上更多資料】

另附一篇更好的博客:http://blog.csdn.net/windone0109/article/details/2908133

 

初級篇:

導出:

$svnlook youngest myrepos //查看到目前為止最新的版本號

$svnadmin dump myrepos > dumpfile //將指定的版本庫導出成文件dumpfile

導入:

$svnadmin load newrepos < dumpfile

 

中級篇:

$svnadmin dump myrepos –r 23 >rev-23.dumpfile           //將version23導出

$svnadmin dump myrepos –r 100:200 >rev-100-200.dumpfile  //將version100~200導出

對比較大的庫可以分解成幾個文件導出,便於備份

$svnadmin dump myrepos –r 0:1000 >0-1000.dumpfile

$svnadmin dump myrepos –r 1001:2000 --incremental >1001-2000.dumpfile

$svnadmin dump myrepos –r 2001:3000 --incremental >2001:3000.dumpfile

在導入時,可以將這幾個備份文件裝載到一個新的版本庫中

$svnadmin load myrepos < 0-1000.dumpfile

$svnadmin load myrepos < 1001-2000.dumpfile

$svnadmin load myrepos < 2001:3000.dumpfile

  

高級篇:

    過濾版本庫歷史:

       假設有三個項目的版本庫

       /RigTMS

       /DocProtect

       /Odin

       現需要將這三個項目轉移到獨立的三個版本庫中,需要做如下操作

       1、轉儲整個版本庫

       $svnadmin dump /path/to/repos > repos-dumpfile

       2、將轉儲文件三次過濾,每次僅保留一個定級目錄,即可以得到三個轉儲文件

       $svndumpfilter include RigTMS < repos-dumpfile > RigTMS-dumpfile

$svndumpfilter include DocProtect < repos-dumpfile > DocProtect-dumpfile

$svndumpfilter include Odin < repos-dumpfile >Odin-dumpfile

       3、雖然現在的RigTMS、DocProtect、Odin都可以用來創建一個可用的版本庫,但他們保留了原版本庫的精確路徑結構(例如: RigTMS的頂級目錄為/RigTMS/trunk、/RigTMS/branches、/RigTMS/tags,而非我們所需要的/trunk、/branches、/tags),如果要實現目標,需要編輯轉儲文件,調整Node-path和Copyfrom-path頭參數,將路徑/RigTMS刪除,同時還要轉儲數據中創建RigTMS目錄的部分。

       Node-path:RigTMS

       Node-action:add

       Node-kind:dir

       Content-length:0

*****特別注意點:如果使用手工編輯dumpfile文件來移除一個頂級目錄,需要注意不要讓使用的編輯器將換行符轉換為本地格式(比如將/r/n轉換為/n),否則文件的內容就與原來的格式不符,這個轉儲文件就失效了。具體做法就是當你在使用編輯器打開文件的時候,編輯器會提示用戶是否需要轉換格式,一定要選擇“否”,切記!!切記!!

       4、接下來就是創建三個新的版本庫,然后將新過濾出來並修改好的三個轉儲文件導入

       $svnadmin create RigTMS;svnadmin load RigTMS < RigTMS-dumpfile

       $svnadmin create DocProtect;svnadmin load DocProtect < DocProtect-dumpfile

       $svnadmin create Odin;svnadmin load Odin < Odin -dumpfile

 

 

****備份環境注意點:

       1、確保沒有其他進程訪問版本庫,關閉apache、svnserve服務

       2、成為版本庫的管理員,如果以其他身份還原版本庫,可能會改變版本庫文件的訪問權限,導致在恢復后依舊無法訪問

       3、svnadmin recover /path/to/repos

       4、重新啟動服務進程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM