【问题标题】:Renamed file, now SVN not allowing me to commit?重命名文件,现在 SVN 不允许我提交?
【发布时间】:2014-03-01 15:01:21
【问题描述】:

我正在使用 Aptana 开发一个 ColdFusion 网站。我们正在使用 SVN 进行版本控制。

我重命名了几个文件,现在正尝试提交其中一个,但出现以下错误:

'SVN Commit' has encountered a problem.
org.apache.subversion.javahl.ClientException: Illegal target for the requested operation
svn: Commit failed (details follow):
svn: Cannot commit 'R:\myPath\My-New-File-Name.cfm' because it was moved from 'R:\myPath\My-Old-File-Name.cfm' which is not part of the commit; both sides of the move must be committed together

这似乎表明我需要同时提交以前的文件(已重命名)和新的重命名文件。如何提交不再存在的文件...?

【问题讨论】:

  • 重命名目录会出现类似问题:stackoverflow.com/questions/29563635/…
  • Windows 不区分大小写,如果重命名文件只更改大小写,则会出现此错误,因此请将文件重命名为其他名称(例如 file2),提交,然后重命名为您真正想要的名称并再次提交。
  • @Loenix:TortoiseSVN 应该同时处理这种特殊情况,因此在 Windows 上不再需要使用两次重命名。

标签: svn commit


【解决方案1】:

提交目录,而不是文件。

将目录想象成一个包含文件列表的文本文件,然后您可以看到要成功提交,您需要更新目录本身,以便它可以删除旧条目并添加新条目。这将在 SVN 中显示为删除旧文件并添加新文件(即对目录进行 2 次更改,而不是对文件进行 1 次更改)

如果只想提交 1 个文件,则需要将其他已更改的文件临时添加到忽略列表中。

【讨论】:

  • 我想过这样做,但我只想提交目录中许多文件中的 1 个。但我现在意识到,如果我在整个文件夹上选择提交,我可以取消选中所有其他文件,只留下原始文件和重命名的文件......谢谢!
  • 完美,比我想象的要容易!
  • 通过以下方式解决了一个相关问题:1) 单独提交文件夹 2) 恢复状态为 > added
  • 这个答案不正确。如果您使用的是 svn 本身(即命令行 svn),那么下面 rkiko 的回答是正确的。也就是说:您在提交中列出旧文件名。当您不想提交目录中的所有更改时,这允许您精确地仅提交您想要的重命名。除此之外,您不会像文本文件列表那样对目录进行更改!
【解决方案2】:

各种客户似乎比其他客户处理得更好..

AnkhSVN for Visual Studio 遇到此错误,无法处理。

TortiseSVN(shell 扩展)可以工作——它知道删除旧文件并添加新文件。

因此,如果您在 Windows 上,解决此问题的一种简单方法是使用资源管理器中的 TortiseSVN 对目录进行提交(删除旧文件名并添加新文件名)。

【讨论】:

  • 现在还没有明智的做法吗? 2016 年出现这个问题似乎非常疯狂:(
  • 我还在纠结这个! GRR 为什么哦,为什么在 Visual Studio 中如此糟糕?我认为这实际上值得使用 Git,我无法找到一个好的解决方案,而且它在浪费时间。
  • 在你遇到这个问题之前是值得的 :)
【解决方案3】:

添加一个旧名称的文件并提交,然后再次删除该文件并提交。

【讨论】:

  • 完全是这样
【解决方案4】:

在带有 subversion 的 eclipse 中,我能够通过在项目中足够高级别的文件夹中执行 Team->同步来解决这个令人困惑的错误,该文件夹包含新旧文件名和位置。如果您移动并重命名了文件,或者您无法弄清楚到底发生了什么,那么在项目的最顶层进行同步不会有什么坏处。

当我这样做时,重命名文件的旧版本出现在同步视图中。一旦我对它们使用“覆盖并提交”,它们就会再次消失。此时,新的最终将正确提交。

【讨论】:

  • 我尝试简单地单击同步视图中的“同步”按钮,但没有成功。这个技巧有效,谢谢。
  • 那么,一步一步,我应该怎么做?右键单击项目和“与存储库同步”?下一步是什么?
【解决方案5】:

svn commit 'R:\myPath\My-New-File-Name.cfm' 'R:\myPath\My-Old-File-Name.cfm' -m "message"

为我工作。您只需要包含已删除的文件即可。

【讨论】:

  • 这是正确的答案,当使用原始命令行 SVN 时,您不想提交整个目录。
【解决方案6】:

对于 Visual Studio 2015,我在修复 Ankh SVN 时遇到了问题。在我的情况下,错误是由于在开发过程中重命名“Form1.cs”(可能是移动它)造成的。这导致新旧 .resx 文件出现问题。

  • 在解决方案资源管理器中突出显示项目以打开挂起的更改视图窗口,
  • 选择文件 > Subversion > 待更改
  • 取消选中路径
  • 检查 subversion 需要的两个或更多文件。如果“新”不在列表中,请以非破坏性方式更改其内容,使其出现在列表中。
  • 运行提交。

希望这对你有用。

【讨论】:

    【解决方案7】:

    其中一个文件有可能被重命名。

    查看错误中的文件名,看看它是否与您的文件匹配。

    如果文件名不匹配,请将您的文件重命名为错误中的文件并提交您要提交的所有文件。 在此之后,您可以重命名文件并再次提交。

    【讨论】:

    • 整个问题都是关于重命名文件的。
    • 哦,我明白了。我犯了一个错误。其余的答案可能仍然有效。
    【解决方案8】:

    如果事情真的搞砸了,最简单的解决方案是从存储库中删除该文件夹,然后以当前形式将其添加回。

    SVN 擦除和替换:

    1. 将包含所有更改的文件夹复制到一个临时位置。
    2. 对文件夹使用 SVN Delete 然后提交。
    3. 将备份副本复制回您的工作副本并提交。

    【讨论】:

    • 这将切断该目录中每个文件的历史记录。我认为你不想那样做。
    【解决方案9】:

    如果您使用 IntelliJ IDEA 并使用 TortoiseSVN 进行提交,有时会发生 IDEA 没有删除该文件夹,Subversion 会出现此错误。

    在这种情况下,这意味着“请不要提交您标记为已删除的文件夹/文件”

    【讨论】:

      【解决方案10】:

      sudo svn rm offendingfile --force

      sudo svn commit -m ''

      完成

      【讨论】:

        【解决方案11】:

        对我来说,许多其他解决方案都不起作用。

        最后的诀窍是这样的:

        1. 我手动备份了存储库文件夹中的所有内容 .svn 文件夹除外
        2. ...然后恢复存储库文件夹
        3. ...然后删除存储库文件夹中除.svn 文件夹之外的所有内容
        4. ...然后将备份文件夹的内容复制回存储库文件夹
        5. ...然后提交。

        然后,也只有到那时,提交才最终对我有用。

        【讨论】:

          【解决方案12】:

          TortiseSVN 在 Windows 资源管理器中打开文件。 选择文件,右键单击,使用 TortiseSVN->unversion 并添加到忽略列表

          然后文件会去掉SVN,变成普通文件。 这样您就可以将文件添加到SVN并提交。

          我使用解决方案解决问题。

          【讨论】:

          • 这将切断文件的历史记录。最好使用svn rename 并提交父文件夹。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-25
          • 1970-01-01
          • 2017-04-29
          • 1970-01-01
          相关资源
          最近更新 更多