将文件添加到SVN,然后在提交前删除

时间:2011-08-05 14:37:25

标签: svn undo delete-file

我想我是粗心的。

我用svn add向svn添加了一堆文件, 然后我看到添加了一些我不想要的文件,所以我用rm删除了它们。

现在我不能再提交,因为提交缺少文件。我尝试过svn清理,但没有帮助。

我现在的工作选择是手动删除每个.svn目录,但这似乎是错误的。

5 个答案:

答案 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全部恢复将让您的生活轻松。