2009-07-31 202 views
148

我已經開始使用Subversion與TortoiseSVN。如果我打開日誌並右鍵單擊舊版本,我會看到兩個聽起來像回滾到舊版本的選項:「將項目更新爲修訂版本」和「恢復到此修訂版本」。更新修訂版本與恢復修訂版

我知道當您只想回顧舊版本,但並未真正更改存儲庫時,將使用更新到較舊版本。當你真的搞砸了,並希望版本庫中的最新版本與舊版本相同時,還原是。

所以說HEAD修訂版本是100,我恢復到95.它會反向合併我的工作副本回95.然後,我可以提交更改到存儲庫,這將創建修訂101正確?如果我要更新回修訂版95,這有什麼不同?它不僅僅能夠扭轉上次修訂版的變化嗎?我很困惑我的工作副本的狀態在恢復或更新到舊版本之後有何不同。

回答

190

更新到修訂版只會將工作副本的文件更新爲您選擇的修訂版。 但你不能繼續工作在這個版本上,因爲SVN會抱怨你的工作拷貝是過期

回覆到本次修訂將撤消在你的工作副本被選中版本之後進行的更改(在你的榜樣轉。96,97,98,99,100) 你現在的工作副本處於修改狀態

兩個scenarions的文件內容是相同的,然而,在第一種情況下,你有一個修改的工作副本,你不能提交更改(如您的workingcopy沒有指向HEAD修訂100)在第二種情況下,你有一個修改工作副本指着頭,你可以繼續工作,並承諾

+0

好吧,說我更新到修訂和我的工作副本數據不足。沒有什麼阻止我改變文件。如果我更改其中一個文件並嘗試提交它,該怎麼辦?林猜測顛覆會看到衝突,迫使我在我提交之前將庫中的最新版本合併到我修改後的工作副本中。 – 2009-08-01 19:48:33

+5

如果你嘗試提交一個比HEAD更老的BASE-Revision的項目,你會得到一個「提交失敗:你的工作副本可能已經過期」 – 2009-08-02 10:35:27

4

將您的工作副本更新到選定的修訂版。如果您希望讓工作副本反映過去的某個時間,或者已經對存儲庫進行了進一步的提交,並且希望一次更新工作副本,則這很有用。最好在工作副本中更新整個目錄,而不僅僅是一個文件,否則工作副本可能會不一致。 這是用來測試特定轉速的目的,如果您的測試已經完成,你可以,如果你想永久撤銷先前的更改使用此命令來測試另一個轉或使用SVN更新得到HEAD

,請使用改爲修改

- 從TSVN幫助文檔

如果你更新你的工作拷貝到一個較早的轉速,這不僅會影響自己的工作拷貝,你做一些改變後,想犯,你會失敗,TSVN將提醒您更新您的WC到最新版本第一個 如果您恢復到rev,您可以提交到repository.everyone將在更新後回到rev。

5

在你的工作拷貝的文件可能一模一樣後,但他們還是很不同的動作 - 倉庫是在一個完全不同的狀態,而不是「恢復後,你將必須提供給您不同的選擇更新「到舊版本。

簡而言之,「更新到」只會影響您的工作副本,但「反向合併和提交」將影響存儲庫。

如果您對舊版本進行「更新」,那麼版本庫並沒有改變:在您的示例中,HEAD版本仍然是100.您不必提交任何內容,因爲您只是搞亂了自己的工作複製。如果您對工作副本進行了修改並嘗試提交,您會被告知您的工作副本已過時,並且在提交之前需要進行更新。如果在同一個存儲庫上工作的其他人執行「更新」,或者如果您簽出另一個工作副本,則它將是r100。但是,如果您「反向合併」到舊版本,那麼您的工作副本仍然基於HEAD(假設您是最新的) - 但是您正在創建一個新版本以取代不需要的變化。您必須提交這些更改,因爲您正在更改存儲庫。完成後,基於HEAD的任何更新或新工作副本都將顯示r101以及您剛剛提交的內容。

29

要了解你的工作拷貝的狀態是如何在這兩種情況不同,你必須瞭解BASE revision的概念:

BASE

工作副本中項目的版本號。如果該項目已被 本地修改,則這指的是 項目出現的方式,而沒有那些 本地修改。

你的工作副本包含在這個基礎版本的每個文件(隱藏在一個文件夾中的.svn)的快照,這意味着因爲它是當從儲備庫最後檢索。這就解釋了爲什麼工作副本需要佔用兩倍的空間,以及如何在沒有網絡連接的情況下檢查甚至恢復本地修改。

將項目更新到版本會更改此基礎修訂版本,從而使BASE過期。當您嘗試提交本地修改時,SVN會注意到您的BASE與存儲庫HEAD不匹配。提交將被拒絕,直到您執行更新(可能還有合併)來解決此問題。

還原爲修訂版不改變BASE。它在概念上與手動編輯文件以匹配較早版本幾乎相同。

2

從龜參考文本:

更新項目至版本 更新你的工作拷貝到選中的版本。如果您希望讓工作副本反映過去的某個時間,或者已經對存儲庫進行了進一步的提交,並且希望一次更新工作副本,則這很有用。最好在工作副本中更新整個目錄,而不僅僅是一個文件,否則工作副本可能會不一致。

如果您想永久撤銷先前的更改,請改爲使用還原到此修訂版。

恢復到此修訂版 恢復到以前的修訂版。如果您已經進行了多項更改,然後決定確實想回到修訂版N中的內容,則這是您需要的命令。這些更改在您的工作副本中被撤消,因此在您提交更改之前,此操作不會影響存儲庫。請注意,這將撤消在選定修訂版之後所做的所有更改,並用早期版本替換文件/文件夾。

如果您的工作副本處於未修改狀態,執行此操作後,您的工作副本將顯示爲已修改。如果您已經有本地更改,此命令會將撤消更改合併到您的工作副本中。

內部發生的事情是,Subversion執行所選修訂後所做的所有更改的反向合併,撤消這些提交的效果。

如果在執行此操作後,您決定撤消撤消操作並將工作副本恢復到以前的未修改狀態,則應該使用Windows資源管理器中的TortoiseSVN→恢復操作,這將放棄由此進行的本地修改反向合併行動。

如果您只想查看早期版本中文件或文件夾的外觀,請使用「更新到修訂」或「將修訂保存爲...」。