2014-02-05 47 views
40

我正在开发使用Aptana的ColdFusion网站。我们使用SVN进行版本控制。重命名文件,现在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 

这似乎表明,我需要同时提交上一个文件(即被重新命名)和新的重命名文件在一起。我如何提交不再存在的文件...?

+0

类似的问题:http://stackoverflow.com/questions/29563635/renamed-directory-now-svn-not-allow-me-to-commit/ – user1717259

+0

Windows不区分大小写,如果你重命名你的文件只改变大小写,你会得到这个错误,所以重命名你的文件到另一个名字(例如file2 ),提交,然后重命名为您真正想要的名称并再次提交。 – Loenix

回答

73

提交目录,而不是文件。

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

如果只想提交1文件,则需要添加其他文件暂时将文件更改为忽略列表。

+1

我想这样做,但我只想提交目录中的许多文件。但我现在意识到,如果我选择提交整个文件夹,我可以取消选中所有其他文件,只保留原始文件和重命名文件...谢谢! – froadie

+0

完美,比我想象的要容易! –

+4

相关的问题解决了1)单独提交文件夹2)恢复状态>添加<3)(更新)的文件4)在乌龟中重命名文件5)提交成功。 – JaBe

12

各种客户端似乎处理这个比别人更好..

AnkhSVN的Visual Studio的遭遇这个错误,无法处理它。

TortiseSVN(外壳扩展)虽然工作 - 它知道要删除旧文件并添加新文件。

因此,如果你在Windows上,一个简单的方法来解决这个问题,就是使用Explorer的TortiseSVN在目录上执行提交(删除旧文件名并添加新文件名)。

+0

现在还没有明智的回合吗?在2016年有这个问题似乎非常疯狂:( –

+0

我仍然陷在这个!GRR为什么哦为什么它在Visual Studio中如此糟糕?它实际上是值得去Git我想,我不能得到一个很好的解决方案,它浪费了很长时间 –

+0

在你遇到这个问题之前是值得的:) – Nearoo

6

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

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

+1

我试着简单地点击同步视图中的“同步”按钮,但它没有奏效。这个技巧很有用,谢谢。 –

0

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

SVN擦拭和替换:

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

这将切断该目录中每个文件的历史记录。我不认为你想这样做。 – Ben

0

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

那么该文件将摆脱SVN的,变成普通的文件。 因此您可以执行操作将文件添加到SVN,并提交它。

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

+1

这将切断文件的历史记录。更好地使用'svn rename'并提交父文件夹。 – Ben

0

对于Visual Studio 2015年,我绊倒了安赫SVN修复。在我的情况下,错误是由于在开发过程中重命名“Form1.cs”(也许是移动它)而导致的。这导致了旧的和新的.resx文件的问题。

  • 突出显示在Solution Explorer中的项目,打开挂起的更改视图窗口,
  • 选择File>颠覆>挂起的更改
  • 取消选中路径
  • 检查两个或多个文件是颠覆的需求。如果“新”不在列表中,则以非破坏性的方式更改其内容,以使其出现在列表中。
  • 运行提交。

希望这适用于你。

2

有机会的话,该文件进行重命名。

看在错误的文件名,看看这跟你的文件相匹配。

如果文件名称不匹配,你的文件重命名为一个错误,并提交所有你想提交的文件。 之后,您可以重命名您的文件并再次提交。

5

添加与旧名称的文件,但提交,然后再删除文件做承诺。

0

SVN提交“R:\ mypath中\ MY-新文件的Name.cfm 'R:我\ mypath中\我的,老文件的Name.cfm' -m ”消息“

作品。您还需要包含已删除的文件。

0

如果您使用的IntelliJ IDEA,并与TortoiseSVN的承诺,有时,它发生该文件夹没有被IDEA和Subversion删除犯此类错误。

在这种情况下,这意味着“请不要提交您标记为删除的文件夹/文件”如果重命名一个目录