无法打开.svn/text-base/file.svn-base文件?

63

我正在使用TortoiseSVN。我刚刚对我的工作副本进行了很多更改,现在我要提交一些文件,但是在一个名为Search.aspx.cs的文件上,它显示:

Commit failed (details follow):
Can't open file 
'C:\-----\trunk\.svn\text-base\Search.aspx.cs.svn-base': 
The system cannot find the file specified.

我已尝试进行SVN更新和清理,但没有恢复此文件。我甚至无法创建差异,因为它会出现类似于缺少文件的错误。我该如何解决这个问题?我做了什么导致了这个问题?

12个回答

80

这个答案是否能解决您的问题?

(来自http://www.uwplatt.edu/csse/tools/subversion/subversion-help.html)

"Failed to add file '(name here)': object of the same name already exists.

或者

"Can't open file 'folder.svn\tmp\text-base\file.svn-base': The system cannot find the file specified."

两者都表示同一文件夹中有两个文件名称完全相同但大小写不同,例如“Readme.txt”和“README.TXT”。Unix和Subversion对大小写敏感,因此认为这些文件是完全无关的。但在Windows中,大小写不敏感,所以当它尝试在Readme.txt(假设为)之上更新README.TXT时,会出现错误。

解决问题的最可靠方法是登录到Unix系统(例如io.uwplatt.edu),并使用Unix笔记本检出该存储库。然后可以使用svn mv命令重命名其中一个文件。如果您正在尝试将文件添加到存储库中,请尝试使用TortoiseSVN ->重命名...将现有文件重命名为完全不同的名称,然后进行更新。请注意,您需要使用TortoiseSVN重命名命令;仅在Windows资源管理器中重命名文件无法解决问题。

我曾经遇到过同样的错误,通过使用Tortoise SVN的仓库浏览器,我确认了仓库中有两个文件名相同但大小写不同的文件。你也可以通过仓库浏览器来解决这个问题,只需删除其中一个文件(你可以先通过仓库浏览器进行差异比较,确保你拥有所需的内容)。


嗯,是的,这可能确实发生了。现在距离那时候太久远了,我已经记不清了。 - Earlz
1
今天刚遇到这个问题。有人错误地将一个文件添加到仓库中,该文件与现有文件同名但大小写不同。无需使用Unix系统来检出,我可以使用Tortise repo-browser删除有问题的文件...然后项目就能顺利地检出了。我想,如果你在repo-browser中重命名文件(而不是在本地工作副本中),那也应该行得通。 - B Pete
1
这正是问题的原因。我在一个非常庞大的文件夹中的子文件夹中遇到了同样的问题。我没有清空整个项目,而是通过从命令行中删除子文件夹,然后进行svn更新来“修复”它,这样就恢复了缺失的子文件夹。 - Cerin
有人尝试通过在Windows中启用大小写敏感来“修复”该问题吗?特别是“obcaseinsensitive”注册表项可能有助于这种情况:http://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem - Robert
1
我在一台CentOS Linux机器上检查了一个文件夹,并尝试从一台OSX机器进行更新,结果出现了这个错误。是的,在我删除了除了大小写不同之外与该文件同名的文件后,错误就消失了...为什么会这样呢? - LeonardChallis

10
您可以复制工作文件:
C: -----\ trunk \ Search.aspx.cs
到丢失的文件中:
C: -----\ trunk.svn \ text-base \ Search.aspx.cs.svn-base 就可以解决问题了。

1
实际上,这不起作用,因为“commit”会说它没有任何变化。 - pcjuzer
如果您只需要使用存储库中的更改更新现有文件,则此方法适用。 - Barrett
1
我检出了最新版本的代码,将需要的文件从该工作副本复制到我的实际工作副本的\trunk.svn\text-base\filename.svn-base中,然后提交了实际的工作副本。成功了!感谢您的指引。 - ErJab

8

你好,我今天遇到了类似的问题。

无法找到文件 .svn\pristine\24\24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base。 我使用了简单的方法来解决这个问题。

首先,我删除了该项目的副本文件夹,然后查找该文件发现不存在于那个文件夹中。所以我只是从其他文件中复制了一个 svn-base 文件,并将其重命名为 24fd530d4bd82341fb514ab912c9e10adbc4ad89.svn-base。然后进行清理操作。之后我又遇到了丢失的文件,我使用同样的方式解决了这个问题。希望能对你有所帮助。

换句话说,解决方案是创建一个新的 svn-base 文件,并使用缺失文件的名称


我通过类似的方式解决了我的问题,即仅检出具有问题的嵌套文件夹(以避免根检出)到一个新位置。然后,我将其缺失的 .svn-base 文件复制到我的实际工作副本的 pristine 文件夹中,因为它找不到该文件。 - mungflesh

5

这篇文章是为那些遇到与不同大小写相关的相同文件名问题不同的人而发布的:

我不确定是什么原因造成了这个问题,但这个解决方法对我有效:

  • 将有问题的部分检出到一个新的临时位置
  • 备份(以防失败)并删除主位置中的.svn文件夹
  • 用临时位置中的文件替换主位置中的.svn文件夹
  • 提交

这对我有用。我只修改了一个文件。某种方式下 .svn 文件夹变坏了。在执行此操作之前请备份您的工作。


1
我做过类似的事情,但我有大约800个已修改的文件,所以我将损坏的目录移动到项目目录之外的安全位置,然后进行更新(获取目录的干净副本),然后将修改后的文件从损坏的目录复制到新目录中(确保不要复制旧的损坏的.svn目录)。我不得不重新添加一些新文件,然后一切都没有出现任何错误地提交了。 - ThatAintWorking
我使用与上述相同的系统:归档损坏的目录,svn up它的父目录以获取干净的版本,然后从归档中复制修改。您可以使用svn status来识别要复制的所有归档文件。 - Jonathan Vanasco

2

我曾经遇到过类似的问题 "(无法打开文件 'folder.svn\tmp\text-base\file.svn-base':系统找不到指定的文件")。

这并不是大小写敏感的问题,而是由于文件路径太长导致的。所以我将文件夹重命名为一个较短的名称,并将其移动到C驱动器中,并成功地进行了检入。

因此,如果不是大小写敏感性问题,请注意文件的完整路径长度。


2

对我来说问题是:大小写敏感

在Linux下提交svn存储库:两个文件的名称相同,除了大小写 在Windows下更新svn存储库:更新或检出期间出错 => 系统找不到指定的文件。


1
我在意外清除了空的.svn/tmp文件夹(以及硬盘上的所有其他空文件夹)后遇到了这个问题。除了恢复一个空的.svn/tmp文件夹之外,以上提供的解决方案都没有帮助(对于所有的.svn文件夹)。

0

我刚才回到这里,因为我的TSVN触发了同样的错误。

在我的情况下,对应目录的简单“清理”有所帮助。


好的,清理工作对我也没用。你必须将更改后的文件复制到一个未版本化的目录中,然后检出存储库的新副本并将更改后的文件复制进去。 - Earlz
我进行了进一步的调查,发现我的Windows驱动程序工具包build.bat是使用-c命令调用的,因此清除了所有子目录(包括.svn*目录)。因此,TSVN无法重新定位已清除目录的设置。考虑到这一点,我宁愿说我的情况比你的容易多了。 - Robert

0

看起来你的工作副本已经损坏了 - Search.aspx.cs 的 SVN 基文件丢失了。

在这种情况下,我通常会在另一个目录中进行单独的检出操作,以创建一个新的工作副本,然后导出我的修改后的工作副本,并将导出内容复制到新的工作副本上。


1
如果您要点踩,请至少评论一下原因,以便说明理由并帮助其他观众... - codekaizen
我没有给这个答案投反对票,但是这个过程应该被视为最后的资源(如果有必要的话)。这对于一些只有几千或甚至几兆字节的仓库来说效果很好,但是当我们谈论包含数GB信息以及多组更改的仓库时,你可能会遇到比实际修复问题更麻烦的情况。 - Helmut Granda

0

你的其它改动已经完成了吗?

如果已经完成了,请将有问题的文件先备份一下,删除当前目录,重新checkout新代码,然后再把备份的文件添加进去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接