[英]Add files to SVN then delete before commit
我想我是粗心的。
我用svn add
向svn添加了一堆文件,然后我看到svn add
了一些我不想要的文件,所以我用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
所以要解決這個問題:(謝謝Linus!)
$ svn revert foo
Reverted 'foo'
或者你可以這樣做:
$ touch foo
$ svn delete --force foo
對於每個文件,您應該可以毫無問題地簽入。
如果您添加了包含子文件夾和文件的文件夾,則在提交之前刪除該文件夾。 在這種情況下,您可以執行以下操作。
$ svn revert <Deleted Folder Name> --depth infinity
這實際上是@Gonzalo Mateo的略微修改版本,它解決了我的問題。
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
如果您有多個目錄刪除了多個文件,則以下命令可以提供幫助:
svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert
我建議先列出要還原的文件。 我們可以通過刪除最后一個管道來完成: svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/'
svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/'
svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/'
。
一步一步的命令解釋:
svn st
- 它用!M
符號列出添加和未正確刪除的文件 grep '!M'
它找到了帶有!M
的行 sed 's/!M \\(.*\\)$/"\\1"/'
這用於擺脫帶有空格的!M
。 它還會引用文件名,因此您不必擔心文件是否包含空格。 xargs svn revert
這將還原列出的所有文件。 如果你svn add X
文件,但你還沒有提交,那么以后你決定要刪除該文件(而不是提交它); 你應該簡單地用svn revert X
恢復你svn add X
命令。
然后它將“撤消”尚未提交的添加。
這解決了我的問題
svn st | grep '!' | sed 's/!M \\(.*\\)$/"\\1"/' | xargs svn revert --depth infinity
您應該注意的一件事是上面的代碼僅適用於最新添加的內容。 所以,如果它發出錯誤,請再做一次svn ci
然后再次運行上面的代碼。 然后svn ci
直到你還原了所有問題。
額外獎勵:添加別名(這適用於Oh-My-ZSH Zsh Shell)
# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \\(.*\\)$/"\\1"/' | xargs svn revert --depth infinity"
現在sra
即SVN Revert All將讓您的生活變得輕松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.