我想我是粗心的。
我用svn add
向svn添加了一堆文件,
然后我看到添加了一些我不想要的文件,所以我用rm
删除了它们。
现在我不能再提交,因为提交缺少文件。我尝试过svn清理,但没有帮助。
我现在的工作选择是手动删除每个.svn目录,但这似乎是错误的。
答案 0 :(得分:38)
据我所知,你有这种情况:
$ 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
对于每个文件,您应该可以毫无问题地办理登机手续。
答案 1 :(得分:5)
如果你添加了一个包含子文件夹和文件的文件夹 然后在提交之前删除了该文件夹。 在这种情况下,您可以执行以下操作。
$ svn revert <Deleted Folder Name> --depth infinity
答案 2 :(得分:2)
如果您有多个目录删除了多个文件,则以下命令可能有所帮助:
svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert
我建议先列出要还原的文件。我们可以通过删除最后一个管道来完成:svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'
。
逐步命令解释:
svn st
- 它列出了已添加的未正确删除的文件,其中包含!M
符号grep '!M'
找到!M
sed 's/!M \(.*\)$/"\1"/'
这用于删除带有空格的!M
。它还会引用文件名,这样您就不必担心文件中是否包含空格。xargs svn revert
这将还原所有列出的文件。答案 3 :(得分:1)
如果您svn add X
一个文件但尚未提交,那么稍后您决定要删除该文件(而不是提交它);您只需使用svn add X
还原svn revert X
命令即可。
然后它将“撤消”尚未提交的添加。
答案 4 :(得分:0)
这解决了我的问题
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全部恢复将让您的生活轻松。