iT邦幫忙

DAY 15
7

版本控管觀念與技巧使用Subversion為例系列 第 15

TortoiseSVN 使用,還原特定版本的異動

在【TortoiseSVN 使用,從 Repository 抓取特定版本程式(Update)】一文中有提到回覆到之前版本的功能,雖然這種功能已經可以讓時光回逤到一定的點,可是有種情況之下是不適用滴。
●最常見的情況如下

demo廢言我們先假設 Retry 功能幾乎改寫了全世界,所以幾乎無法在目前 304 版本中拿掉Retry 功能(可能會漏拿或多拿,導致更多的災難)當發生了以上的情況而你使用了【抓取特定版本】的功能就會導致 303、304 版本所修改的部份消失,如果遺失的這兩個版本都是小修改,或許我們可以認命的改回去,但如果也是一整個功能或是大調整那這樣的作法就太累了,因此本篇的主角【還原特定版本的異動】就上場了!

●首先利用一個純文字檔模擬,這個文字檔依據上圖的方式做送交(Commit)

●當你需要還原特定版本的異動時必須要從 Log 檢視的視窗下發動(不然你怎麼知道要回去哪)依據 Log 我們可以很明確的了解要將第23版的異動恢復,對者要恢復的版本按「滑鼠右鍵」→「Revert changes from this revision」

按下去後會跳出詢問,基本上就是按「Yes」

●再來就會跳出合併視窗

基於 SVN 擁有自動合併功能的情況之下運氣好的話你會直接得到成功的提示,運氣不好的話你會收到衝突警告(自動合併觀念請參考 Subversion 版本控管的基礎概念

如果遇到了衝突就來處理吧!點擊【Edit Conflict】開啟工具

將要保留的部份設定一下就可以解決衝突了

本範例衝突的原因在於 原先加上 Retry功能的版本還有多一行空白(請見左上區塊)

=====修改程式碼=====
=====加上了 Retyr 功能=====
空白行

但是下一版本已經將那一行空白換成了 =====加上了 A 功能===== 並且又在下面多了一行空白,這種每個版本都多一行空白然後下個版本又刪除空白加字的行為導致SVN無法判斷往後的差異。

●確定了正確的合併版本後按下「Resolved」

●開啟檔案來看看,的確 Retry 的功能被整個拿掉了

demo廢言建議讀者可以模擬本文範例來學習整個步驟,此功能通常不會用到,但用到的時候你會很感動,但是此功能要好用有一個先決條件!就是 demo 一直重申的 Log 要填寫清楚以及一個模組一個模組的送交(Commit),你的 Log 越清楚、送交(Commit)切割的越準確就會減少很多不必要的麻煩事。


上一篇
版本控管下的移動與更名
下一篇
TortoiseSVN 使用,匯出一份沒有版本控管的檔案
系列文
版本控管觀念與技巧使用Subversion為例30

1 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-02-15 14:37:18

如果在還原特定版本之前,想要先看看那一版寫了那些code,可以用save revision to 的功能,把某版次的檔另存出來。
還蠻激賞的。

我要留言

立即登入留言