2010-10-27 161 views
7

有沒有辦法從特定的變更集恢復?svn從變更集恢復

的變化發生了,因爲我從變更見。現在,我想在提交之前恢復文件。

我SVN恢復路徑/到/文件,但它不要求輸入密碼或任何東西。什麼都沒有發生。

+0

請更詳細一點。 – splash 2010-10-27 09:36:11

+0

當我爲每個文件執行svn還原時沒有任何事情發生。 – Woppi 2010-10-27 09:39:10

+0

請更詳細一點。如果更改已提交,則可以恢復到預先提交的修訂版本。 – user434507 2010-10-27 09:40:57

回答

3

解決:SVN 合併-r1234:4321路徑/到/ yourfile路徑/到/ thefileyouwanttogobackto,

其中
1234是你的修訂
4321是你想回去修改。

3

你可以做一個「反向合併」,即「應用」所有更改從當前的修訂,要回去修改(即撤銷所有要回去的變化從修訂到目前修訂版)。

svn merge -r HEAD:nnnn . 

其中nnnn是您想要返回的修訂。 http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

查看更改後,解決所有衝突等,請使用svn commit將更改推送到存儲庫。

+0

是的,謝謝zellus,我的錯!我已經更新了我的答案以反映這一點。 – 2010-10-27 09:52:38

+0

http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo詳細討論了恢復提交。 – zellus 2010-10-27 09:52:55

+0

它說「不能替換內部的目錄」 – Woppi 2010-10-27 10:17:36

1

如果你知道你要在這裏恢復某個版本是恢復它多了一個途徑。

svn diff -c r1031 | grep ^Index | awk '{ print $2}' | xargs -I {file} svn export -r 1030 {file} {file} 

它發現在R1031改變了所有文件,並與從版本相同的文件替換1030

PS:也請小心,如果你要恢復的文件並沒有出現在1030它可能可能不符合你的預期。

0

詳情請參閱此博客條目:

http://blog.mafr.de/2008/05/13/revert-a-commit-in-svn/

一些好的背景說明:

要了解這裏發生了什麼,需要什麼 合併命令會概念的一些背景:它記錄哪些變更必須由 修改爲N修改爲修訂N + 1(稱爲增量) ,並將其應用於工作副本。這不是我們在 方案中想要的,所以我們將命令 一行的修訂順序顛倒過來。實際上,我們告訴合併命令以其他方式創建一個增量 。結果是代碼庫的「倒帶」。

而且也,在評論中,如何做到這一點的TortoiseSVN:

要在TortoiseSVN做到這一點,用鼠標右鍵單擊該目錄或文件 你想恢復,並使用「合併「從TortoiseSVN菜單。選擇 選項「合併兩棵不同的樹」。在「發件人」下方,選擇修改頭 。在「收件人」下選擇舊版本+1(即如果您希望 恢復到版本169,請在版本框中輸入修訂版本170)。在SVN Book

0

最簡單的方式描述:

$ svn merge -c -303 http://svn.example.com/repos/calc/trunk 

將撤銷在變更303所做的任何更改,您可以查看並根據需要進行提交。