繁体   English   中英

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

[英]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"

现在sraSVN Revert All将让您的生活变得轻松。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM