2009-04-13 67 views
25

我有一個關於svn中的BASE版本的問題。我知道它是上次更新運行時的項目的原始版本,svn diff和status基本上是針對此版本運行的。 BASE何時更新?更新運行時是否更新到HEAD?即使在更新期間發生衝突,這總是如此嗎? BASE有什麼衝突?它是否仍然具有最近更新(導致衝突的最新更新之前)的版本,或者即使存在衝突,它是否會更新爲HEAD?
此外,當svn提交運行時,我假設BASE得到更新與我的本地更改,在這一點上BASE,HEAD和我的本地副本都是一樣的?如果提交成功。什麼時候svn BASE變得等於HEAD

回答

38

頭在庫中的最新版本。 BASE是您從存儲庫獲取的最後一個修訂版本。成功提交或更新後它們是相同的。

當您進行更改時,您的文件與BASE副本不同。當你恢復時,他們會回到匹配BASE修訂版。當您發生衝突時,您不會更新存儲庫。相反,您的文件被認爲仍然是「正在編輯」,就像您正在進行更改一樣。在你解決衝突之後,你基本上決定了最終文件的樣子,然後你按照正常的方式提交它們。所以,衝突就像一個特殊編輯案例。

+3

儘管不一定在提交之後,但它們在更新之後仍然是相同的,不過一定要簡短。考慮目錄和「混合版本工作副本」。 – bendin 2009-04-14 09:13:05

+0

顯然創建這些「混合版本工作副本」 - 這意味着你可以創建一個提交,而不需要完全知道發生了什麼 - 是「Subversion的基本規則」之一的結果。 – 2009-10-14 10:07:07

7

BASE是您的工作副本的修訂版本,因爲它存在於存儲庫中。換句話說,你的修改沒有你所做的改變。所以如果你svn update一個文件或文件夾頭,然後BASE和HEAD是平等的。

當出現衝突時,BASE將成爲與工作副本衝突的提交之前的修訂。

對項目運行svn info以查看它是BASE修訂版。

Revision Specifiers

0

理論:成功遞歸更新或切換後,您的所有文件的基本版本將成爲頭。提交或部分更新後,某些文件可能位於HEAD修訂版本中,但是隻有在不跳過文件的更新之後,才能確保所有文件都處於相同版本。 (跳過的原因是沒有版本的障礙或衝突)。

但是,爲什麼你需要知道這一點。 Subversion應該在內部知道這一點,但在大多數情況下,這些知識對於用戶來說應該沒有什麼問題。 (當文件過期時,Subversion會自動發出警告)。

據我所知,唯一一次確實需要確保處於穩定版本的是,當您從工作副本創建分支時。

3

查看日誌時很重要,因爲沒有url的svn日誌顯示您的BASE日誌,但是使用url您的HEAD日誌,這就是爲什麼我總是使用「svn log -rHEAD:1」查看所有更改。

相關問題