2010-06-27 80 views
4

我是Subversion的新手,來自Source Safe,它讓我瘋狂。使用Tortoise界面,Commit不斷在我的bin目錄中顯示我的.java文件,它說這是「缺失」 - 好吧,這是一個單獨的問題。基本上,當我嘗試了幾件事來擺脫虛假的「bin」消息時,Tortoise卻刪除了我的整個源代碼目錄。我嘗試重新添加東西,但是當我添加時,它以新的方式出現,沒有歷史記錄。如何將Subversion存儲庫(不是我的工作副本)還原爲特定的修訂版本?

如何將Subversion帶回特定修訂版本?彷彿我從未發生過?我知道如何在VSS中做到這一點,但每次我嘗試在TortoiseSVN時,它只是修改我的工作副本。我不想再檢查我的工作副本,因爲這會讓我失去我所有的歷史。 Subversion可以忘記嗎?

嘗試尋找在stackoverflow中,順便說一句,但我發現最接近的東西是導出和重新導入整個存儲庫,我不認爲我在那個點上。 Subversion必須能夠做到這一點最簡單的事情!

回答

4

既然你特別問了一下TortoiseSVN,你可以做到以下幾點:

  • 右鍵點擊你的工作目錄
  • TortoiseSVN的
  • 更新到版本
  • 點擊日誌
  • 選擇你想要的版本版本號到版本框中 - 如果您已經知道版本號,則可以直接輸入)。
  • 單擊確定

然後,只需提交你的資料庫的修改與相應的消息。

+0

謝謝,我現在沒有權限訪問存儲庫。 – orbfish 2010-06-28 15:33:53

+0

當我嘗試將舊修訂版提交到主幹時,我收到一條錯誤消息,告訴我需要先更新它 - 這當然會將其恢復爲HEAD修訂版... – Christian 2014-06-27 09:17:03

+1

我必須進入日誌,點擊我想要的修訂版本,「恢復到此版本」,然後重新提交。 「更新修改」對我不起作用... – Christian 2014-06-27 10:13:03

2

您不會帶SVN回來;你拿回你的工作副本,然後提交。

編輯:根據命令是什麼(IE,svn cp而不是cp),subversion會記住文件的祖先(歷史)。

你可以反向合併它,或者你可以複製它。複製可能是更好的選擇。

如果我要做到這一點,我會做:

svn update 
svn rm directory 
svn ci -m "temporarily removed the content" 
svn cp -r [revision] directory ./directory 
svn ci -m "copied revision [revision] to current" 

然而,可能是更好的方式來做到這一點,將是:

svn update 
svn merge -r HEAD:[revision] directory directory 
svn ci -m "reverted back to [revision]" 

對於一些地方在哪裏放置'目錄',你可能不得不使用倉庫中位置的URL,例如,如果你剛剛刪除了根目錄(因此沒有什麼可以引用的)。無論是或合併,第一個是回購的URL,第二個是本地目錄...雖然它可能會使用本地目錄兩次。

只記得;如果它不能正常工作,請不要檢查它:D (這是使用第二種方法的優點...並且它需要較少的數據傳輸)

6

Subversion不會忘記,但是您可以做一些這樣的:

比方說,你目前的版本是100,你想回去的修訂70.您將創建一個修訂101,這是完全一樣的70

1)檢查一個不錯的乾淨的工作副本。

2)合併(向後)更改。

svn merge -r100:70 http://repo.com/my/project/trunk 

3)檢查完整性。你的工作拷貝到底是你想要的嗎?如果是這樣的:

svn commit -m "rolled back to the good old days of r70

相關問題