2010-07-21 133 views
39

我有一個問題,看起來很簡單,但很難解決。刪除目錄後,我收到了提到的錯誤。我還沒有找到解決衝突的解決方案。這是如何發生的:SVN提交失敗:目錄已過期

 
svn add dir 
svn add dir/file1 
svn commit 
svn add dir/file2 
svn commit 
svn delete dir 
svn commit 
--> commit failed 
--> Directory '/dir' is out of date 

顯而易見的解決方案'svn update'不起作用。 SVN更新後下一提交失敗:

 
Commit failed 
Directory '/dir' remains in conflict. 

在這期間我發現了一個解決方案,但它是一個有點麻煩:

 
svn resolve --accept working dir 
svn commit --> still fails 
svn update 
svn commit --> still fails 
svn resolve --accept working dir 
svn commit --> NO PROBLEM! 

兩個問題: - 因爲我是任何人都可以解釋這種行爲非常好奇 - 這個問題發生在一個更復雜的情況下的perl腳本中。任何人都可以給我一個簡單的解決方案,在Perl腳本中是'可行'?

回答

58

只要做一個svn update然後你的提交應該工作。

+2

打我給它。另外,更新應該是您正常工作流程的一部分。我通常在提交之前更新。 – hometoast 2010-07-21 10:52:36

+0

這是我想到的一個明顯的解決方案。但是在svn更新之後,我得到:svn commit - >'\ dir'仍然存在衝突 – 2010-07-21 11:19:12

+0

,但是'svn update'會刪除工作目錄中的更改,因此您所有的工作都將被刪除,然後再提交。我對嗎? – VextoR 2011-09-01 13:54:29

1

你只需要更新,然後提交

+1

這是我想到的明顯解決方案之一。但在svn更新後,我得到:svn commit - >'\ dir'仍然存在衝突 – 2010-07-21 11:19:37

1

你有沒有做最後的承諾之前試過svn up dir

+1

這是我想到的一個明顯的解決方案。但是SVN更新後,我得到:SVN提交 - >「\目錄」處於衝突 – 2010-07-21 11:27:30

57

如果我理解正確的顛覆,這個問題是這樣的:

顛覆跟蹤最新的版本號爲每個文件和目錄分別。 無論何時提交文件更改,父目錄的修訂都會在回購中發生變化,但工作副本仍舊在其舊版本中具有該目錄。

因此,在添加文件之後,您的方案中回購庫中的父目錄具有比您的工作副本更高的修訂版。 當您嘗試刪除在過時的版本上工作的目錄時。

要解決:

做一個svn update添加文件後,但刪除目錄之前。

一般情況下,如果您不想引入其他人的更改,可以將更新限制到目錄本身:svn up --depth empty dir

+0

非常感謝的是,@Stephen弗里德里希 - 只是想說明,這樣做'整個目錄的SVN mv'時(這是什麼給我帶來了到這篇文章),添加和刪除發生在一個步驟中;不幸的是,似乎「在添加文件之後進行svn更新,但是在刪除目錄之前」不能在這種情況下應用。然而,對我而言,工作是手動刪除'舊'目錄(使用rm -rf),然後再次提交。乾杯! – sdaau 2011-11-18 04:30:47

+0

我會很樂意提出這個答案,使其達到頂峯。 – Brandon 2014-10-07 18:06:21

+0

@Stephen Friedrich,如果您在意大利貝加莫附近發生問題,請致電我欠你一頓晚餐...... – 2016-09-07 07:37:10

0

爲了解決這個問題,我使用了'svn revert',然後再次執行提交,它應該刪除當時執行'svn delete'中的內容並再次提交。我得到這個問題試圖重命名一個目錄,但希望這將工作。

0

進行更新,清理然後提交。

0

我面臨着全新的工作空間類似的問題:

$ svn delete dir/file 
D   dir/file 
$ svn ci -m "comment1" 
Deleting  dir/file 
$ svn delete dir/ 
D   dir 
$ svn ci -m "comment2" 
Deleting  dir 
svn: Commit failed (details follow): 
svn: Item 'dir' is out of date 

要解決我的問題重新更新的來源和使用「刪除URL」命令:

$ svn delete --force https://server/path.../dir 
$ svn update