2011-08-05 328 views
21

我想我是粗心的。添加文件到SVN然後提交之前刪除

我加了一堆文件與svn add到SVN, 然後我看到幾個文件補充說,我不想讓我刪除了他們與rm

現在我不能再犯,因爲提交缺少文件。我試過svn清理,但沒有幫助。

我現在的工作選項是手動刪除每個.svn目錄,但似乎是錯誤的。

+4

你可以'svn恢復'添加的文件。 –

+0

相信我,你沒有被粗心大意。 Svn應該真正爲你照顧這個,但它並不總是那麼聰明。 – trysis

回答

37

據我所知,你有這樣的情況:

$ touch foo 
$ svn add foo 
A   foo 
$ rm foo 
$ svn ci 
svn: Commit failed (details follow): 
svn: 'foo' is scheduled for addition, but is missing 

因此,要解決它做到這一點:(!感謝萊納斯)

$ svn revert foo 
Reverted 'foo' 

,或者你可以這樣做:

$ touch foo 
$ svn delete --force foo 

爲每個文件,你應該能夠沒有問題的檢查。

+1

沒有意識到這實際上是刪除了文件本身,而不僅僅是SVN跟蹤。請注意,這也會從本地目錄中刪除文件。 –

1

如果您的文件爲svn add X,但您尚未提交,則稍後您決定要刪除該文件(而不是提交它);你應該簡單地用svn revert X來回復你的svn add X命令。

然後它將「撤消」尚未提交的添加。

5

如果您在 之內添加了包含子文件夾和文件的文件夾,那麼您在提交之前刪除了該文件夾。 在這種情況下,你可以做如下。

$ svn revert <Deleted Folder Name> --depth infinity 
+0

我收到一個錯誤:**未找到節點** –

2

如果你有多個文件被刪除多個目錄,以下命令可以幫助:

svn st | grep '!M' | sed 's/!M  \(.*\)$/"\1"/' | xargs svn revert 

我建議首先列出將要恢復的文件。我們可以通過刪除最後一個管道來實現:svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'

循序漸進命令解釋:

  • svn st - 它列出了添加和unproperly刪除文件與!M符號
  • grep '!M',它會發現!M
  • sed 's/!M \(.*\)$/"\1"/'這是用來擺脫線與空間的!M。它也會引用文件名,所以你不必擔心文件是否包含空格。
  • xargs svn revert這將恢復列出的所有文件。
+0

請您詳細說明您的答案,並增加關於您提供的解決方案的更多描述。 – abarisone

+1

**這個問題已經接近三年了。**還有一點需要詳細說明你的答案。另外請注意,'svn st'的輸出可能會在沒有通知的情況下發生變化,從而導致您的解決方案無效... –

3

這實際上是@Gonzalo Mateo的稍微修改版本,它解決了我的問題。

svn st | grep '!' | sed 's/!M  \(.*\)$/"\1"/' | xargs svn revert --depth infinity 
+0

這解決了我的問題。謝謝。 –

0

這解決了我的問題,您應該注意

svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity

的一件事是,上面的代碼只適用於最新的補充。因此,如果出現錯誤,請再次運行svn ci,然後再次運行上述代碼。然後再次svn ci,直到你恢復了每一個問題。

獎勵: 添加別名(這是哦,我的-ZSH巖組殼牌)

# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity"

現在sraSVN恢復所有會讓你的生活更輕鬆。

相關問題