我想我是粗心的。添加文件到SVN然後提交之前刪除
我加了一堆文件與svn add
到SVN, 然後我看到幾個文件補充說,我不想讓我刪除了他們與rm
。
現在我不能再犯,因爲提交缺少文件。我試過svn清理,但沒有幫助。
我現在的工作選項是手動刪除每個.svn目錄,但似乎是錯誤的。
我想我是粗心的。添加文件到SVN然後提交之前刪除
我加了一堆文件與svn add
到SVN, 然後我看到幾個文件補充說,我不想讓我刪除了他們與rm
。
現在我不能再犯,因爲提交缺少文件。我試過svn清理,但沒有幫助。
我現在的工作選項是手動刪除每個.svn目錄,但似乎是錯誤的。
據我所知,你有這樣的情況:
$ 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
爲每個文件,你應該能夠沒有問題的檢查。
沒有意識到這實際上是刪除了文件本身,而不僅僅是SVN跟蹤。請注意,這也會從本地目錄中刪除文件。 –
如果您的文件爲svn add X
,但您尚未提交,則稍後您決定要刪除該文件(而不是提交它);你應該簡單地用svn revert X
來回復你的svn add X
命令。
然後它將「撤消」尚未提交的添加。
如果您在 之內添加了包含子文件夾和文件的文件夾,那麼您在提交之前刪除了該文件夾。 在這種情況下,你可以做如下。
$ svn revert <Deleted Folder Name> --depth infinity
我收到一個錯誤:**未找到節點** –
如果你有多個文件被刪除多個目錄,以下命令可以幫助:
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
這將恢復列出的所有文件。請您詳細說明您的答案,並增加關於您提供的解決方案的更多描述。 – abarisone
**這個問題已經接近三年了。**還有一點需要詳細說明你的答案。另外請注意,'svn st'的輸出可能會在沒有通知的情況下發生變化,從而導致您的解決方案無效... –
這實際上是@Gonzalo Mateo的稍微修改版本,它解決了我的問題。
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
這解決了我的問題。謝謝。 –
這解決了我的問題,您應該注意
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"
現在sra
即SVN恢復所有會讓你的生活更輕鬆。
你可以'svn恢復'添加的文件。 –
相信我,你沒有被粗心大意。 Svn應該真正爲你照顧這個,但它並不總是那麼聰明。 – trysis