2010-12-22 60 views
6

我完全糊塗了假設我有一個工作副本並執行以下操作:SVN刪除頭痛我做錯了什麼?

svn mkdir trunk 
svn mkdir tags 
svn mkdir branches 
svn commit -m "added trunk branches and trunk" 
cd trunk 
touch a b c d e f g 
svn add a b c d e f g 
cd .. 
svn commit -m "added files" 
svn copy trunk tags/1.0 
svn commit -m "tagged 1.0" 

現在我想刪除一個文件,並標記另一個版本

svn delete trunk/e 
svn commit -m "deleted file e" 
svn copy trunk tags/1.1 
svn commit -m "created tag 1.1" 

我得到類似的錯誤信息以下內容:

/svn/repos/banana/!svn/wrk/1f39512a-0e1e-11e0-9d1f-5be991158436/63885/tags/1.1/e」 未找到路徑

我在這裏做錯了什麼?

更新:

我發現,如果我做一個SVN更新之後刪除一切工作正常。我想要解釋這種行爲。

+2

需要注意的一件事是,一旦創建了trunk,tags,branches,通常不會維護整個存儲庫的工作副本,通常只有一個分支或給定工作副本中的trunk。 – 2010-12-31 07:42:01

回答

10

在提交後使用刪除操作時,這顯然是Subversion的一個已知問題。當您提交時,您的工作副本將變爲混合版本工作副本,然後它不允許提交刪除。

您可以在執行更新/提交之前通過運行svnversion來驗證此問題。您會注意到混合版本標有「0:4」之類的工作副本版本。

從Subversion best practices document

你的工作副本的目錄和文件可以在不同的「工作」修訂版本:這是一個故意的特性,它允許你混合並用較新的符合舊版本的東西。但有幾點你必須知道的事實:

  1. 每svn提交後,你的工作副本有混合修訂。您剛剛提交的內容現在位於HEAD修訂版本中,而其他所有內容都位於較舊的修訂版本中。
  2. 某些提交被禁止:
    • 您不能提交刪除沒有HEAD工作修訂版的文件或目錄。
    • 您無法將屬性更改提交到沒有HEAD工作修訂版的目錄。
  3. svn update會將您的整個工作副本帶到一個工作版本,並且是第2點提到的問題的典型解決方案。

圖書參考The limitation of mixed revisions

在這篇文章中,這也很好地解釋了關於mixed revision working copies

+0

請更新您的SVN書籍參考資料,以使用最新版本(每晚)而不是6年以上的版本!謝謝! – jgifford25 2010-12-31 17:59:48

2

錯誤信息也包含在本

svn: Commit failed (details follow): 
svn: File '1.1/e' is out of date 

我發現,如果我在複製之前做一個svn update來標記它的工作原理

svn delete trunk/e 
svn commit -m "deleted file e" 
svn update 
svn copy trunk tags/1.1 
svn commit -m "created tag 1.1" 

而且工作正常。對這種行爲的解釋將不勝感激。

+0

這是天賜之物。如果發生這種情況,請使用svn revert tags/yourtag,然後按照上述操作。 – kontur 2017-10-20 09:10:01