【问题标题】:Add files to SVN then delete before commit将文件添加到 SVN,然后在提交前删除
【发布时间】:2011-10-20 22:40:12
【问题描述】:

我想我是粗心的。

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

现在我不能再提交了,因为提交丢失了文件。我尝试了 svn cleanup 但没有帮助。

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

【问题讨论】:

  • 您可以svn revert添加的文件。
  • 相信我,你没有粗心。 svn 确实应该为您解决这个问题,但它并不总是那么聪明。

标签: svn undo delete-file


【解决方案1】:

据我了解,您有这种情况:

$ 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跟踪。请注意,这也会从本地目录中删除文件。
【解决方案2】:

如果您svn add X 一个文件,但尚未提交,那么稍后您决定要删除该文件(而不是提交);你应该简单地用svn revert X回复你的svn add X命令。

然后它将“撤消”尚未提交的添加。

【讨论】:

    【解决方案3】:

    如果您添加了一个包含子文件夹和文件的文件夹 然后您在提交之前删除了该文件夹。 在这种情况下,您可以执行以下操作。

    $ svn revert <Deleted Folder Name> --depth infinity
    

    【讨论】:

      【解决方案4】:

      如果您有多个目录并删除了多个文件,以下命令可能会有所帮助:

      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 这将还原所有列出的文件。

      【讨论】:

      • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
      • 这个问题已经有将近三年的历史了。另外,详细说明你的答案会很有帮助。另请注意,svn st 的输出可能会更改,恕不另行通知,这会使您的解决方案无用...
      【解决方案5】:

      这实际上是@Gonzalo Mateo 的略微修改版本,它解决了我的问题。

      svn st  | grep '!' | sed 's/!M      \(.*\)$/"\1"/' | xargs svn revert --depth infinity
      

      【讨论】:

        【解决方案6】:

        这解决了我的问题

        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 将使您的生活变得轻松。

        【讨论】:

          猜你喜欢
          • 2010-12-19
          • 1970-01-01
          • 1970-01-01
          • 2017-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-24
          相关资源
          最近更新 更多