2009-07-23 293 views
1

什麼是我團隊中的某個人「錯誤地」刪除當前版本的團隊存儲庫中的多個文件。是否有可能將當前的本地版本更新爲頭版本?當我點擊提交時,subclipse無法識別丟失的文件來上傳它們。SVN - 將完整本地副本更新爲HEAD版本

由於提前,
rAyt

+0

我不太明白你的問題,但在你嘗試任何事情之前,先用本地修訂版快速備份目錄。 – Elijah 2009-07-23 17:44:51

+0

對不起,糾正了一句話。應該現在更有意義。 – 2009-07-23 17:47:55

回答

9

哦,對皮特!的愛。答案迄今已經 - 充其量 - 誤導

從你的問題,這聽起來像你正在嘗試這樣的事:

svn update -r8 
# ok, I can see the deleted file now 
svn commit -m "I want r8 to be newest" 

除了將無法正常工作沒有修改。提交,你可以更新到舊版本,但你不能在那裏做出改變。你不能改變過去。你只能提交一個新的修訂版,撤銷損壞。

好吧,讓我們假設你的倉庫位於svn:// repo。 這裏是一個簡化的例子,其中文件夾中包含兩個文件「a」和「b」。我們稱之爲修訂版8(r8)。

trunk # working copy of svn://repo/trunk 
    a 
    b 

J.R.黑客,滑倒了,不小心刪除B:

svn rm b 
svn commit -m "oops" 

讓我們把所得到的承諾R9。

所以,下一次你從庫中更新,

svn update 

trunk 
    a 

b消失!恐慌?不。這是一個版本控制系統。任何已簽入的內容都可以恢復。這裏有兩種可能性:

只是副本從舊版本的文件,即它仍然存在的最後修訂:8

svn cp svn://repo/trunk/[email protected] . 
svn commit -m "restored b from revision 8" 

更一般的解決方案是使用一個合併。你可以使用這種技術來消除不僅僅是一個流浪的刪除。

svn merge -r9:8 . . 
svn commit -m "reverted the changes made in revision 8" 

閱讀本合併的方式是:

首先要弄清楚什麼樣的變化需要作出從R9(回)來獲取到存儲庫文件夾的R8(SVN://回購/主幹)與當前目錄相關聯(第一個「。」)。現在,在當前目錄中的工作副本上執行這些更改(第二個「。」)。

還有一個更方便的語法,如果你只是還原一個變化:

svn merge -c-8 . . #note the minus sign before the 8 

如果你不使用SVN命令行,閒逛的工具一點,你一定要找東西。例如,當您從工作副本中打開日誌時,TortoiseSVN具有方便的「從此修訂中恢復更改」。

1

採取刪除功能於SVN從修訂文件的地方(例如,桌面上的一個臨時文件夾),然後更新(這將刪除原始文件的副本,根據你的同事犯下的刪除行爲),然後移回你的副本並將它們提交回SVN。

+0

這種方法將失去與意外刪除文件的歷史連接,並且會在資源庫中存儲兩次相同的文件(內容),除非您在服務器上至少使用svn 1.6。 – bendin 2009-07-24 09:02:57

0

我會做到以下幾點:

找到之前刪除的版本號......做一個svnadmin的轉儲-r1:[goodrevisionnumber這裏]> file.dump。

然後,創建一個新的存儲庫「svnadmin create [repository name]」,然後將轉儲裝載到新的存儲庫中。 「svnadmin的負載[newrepositoryname] < file.dump。

然後,看看這個版本和文件從舊結賬複製到新的和提交。

+0

那麼我們是否會放棄之前的所有修訂版本? – 2009-07-23 17:49:00

相關問題