" svn清理"失败时该怎么办?

时间:2020-03-06 14:59:13  来源:igfitidea点击:

我在工作文件夹中进行了很多更改,并且尝试进行更新时搞砸了。

现在,当我发出" svn cleanup"时,我得到:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control

MemPoolTests.cpp是另一个开发人员添加的新文件,并且在更新中删除。以前,它在我的工作文件夹中不存在。

有什么我可以做的以尝试继续前进而不必签出存储库的新副本吗?

澄清:感谢我们提供有关移开目录并放下新副本的建议。我知道这是一种选择,但是我想避免这种选择,因为有很多更改嵌套在多个目录的深处(这应该是一个分支...)

我希望采用一种更具攻击性的清理方法,也许以某种方式迫使SVN文件无法恢复到已知状态(并且我尝试删除该文件的工作副本……这无济于事)。

解决方案

如果其他所有方法均失败:

  • 检入一个新文件夹。
  • 复制修改后的文件。
  • 签回。
  • 在删除旧文件夹并使用新文件夹之前,将旧文件夹压缩到某个位置(我们永远都不会知道+偏执狂是不错的选择)。

此答案仅适用于1.7之前的版本(感谢@?ukaszBachman)。

Subversion在每个文件夹(.svn)中存储其信息,因此,如果我们只处理一个子文件夹,则无需仅检查出现问题的文件夹,就可以检出整个存储库:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir

这将为我们提供borked文件夹的良好工作副本,但我们仍将所做的更改备份在borked_dir.bak中。 Windows / TortoiseSVN也适用相同的原理。

如果我们在隔离的文件夹中进行了更改,请查看

svn checkout -N borked_dir   # Non-recursive, but deprecated

或者

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'

我有同样的问题。我无法提交,清理将失败。

使用命令行客户端,我能够看到一条错误消息,表明它无法将文件从.svn / props移至.svn / prop-base。

我查看了特定文件,发现该文件被标记为只读。删除只读属性后,我可以清理文件夹并提交我的更改。

从头开始时不是一个选择...

我删除了.svn目录中的日志文件(我也删除了.svn / props-base中有问题的文件),进行了清理,然后恢复了更新。

它可能并非在所有情况下都适用,但是当我最近遇到此问题时,我的"解决办法"是升级系统上的Subversion程序包。我一直在运行1.4.something,当我升级到最新版本(在我的情况下为1.6.6)时,结帐成功了。

(我确实尝试过重新下载它,但结帐到干净目录总是挂在同一位置。)

我们可能会遇到两个文件名仅大写不同的问题。如果遇到此问题,则创建另一个工作副本目录不能解决该问题。

当前的Windows(即cr脚的)文件系统根本无法理解FilenameFILEname之间的区别。我们有两个可能的修复:

  • 在具有真实文件系统(基于Unix)的平台上签出,重命名文件并提交更改。
  • 库存到Windows后,可以在Eclipse SVN存储库浏览器中重命名文件,该浏览器可以识别差异并在那里重命名文件。
  • 我们也可以使用svn named -m" broken filename case" http:// server / repo / FILEname http:// server / repo / filename从任何命令行SVN客户端远程重命名有问题的文件。

带有Windows的网络驱动器有时会发生只读锁定。尝试断开连接,然后再次重新连接。然后清理并更新。

如果问题是区分大小写(在Mac和Windows上签出时可能会出现问题),并且我们没有选择在* nix系统上签出的选项,则应该可以进行以下操作。这是从一开始的过程:

% svn co http://[domain]/svn/mortgages mortgages

(随后结帐)

svn: In directory 'mortgages/trunk/images/rates'
svn: Can't open file 'mortgages/trunk/images/rates/.svn/tmp/text-base/Header_3_nobookmark.gif.svn-base': No such file or directory

SVN在这里尝试检出两个名称相似的文件,只是大小写不同,分别为" Header_3_noBookmark.gif"和" Header_3_nobookmark.gif"。 Mac文件系统默认情况下不区分大小写,从而导致SVN在这种情况下阻塞。所以...

% cd mortgages/trunk/images/rates/
% svn up
svn: Working copy '.' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)

但是,正如我们所知,运行" svn cleanup"是行不通的。

% svn cleanup
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'spacer.gif' is not under version control

spacer.gif并不是这里的问题,它只是无法从上一个错误移至下一个文件。因此,我从目录.svn之外的目录中删除了所有文件,并删除了SVN日志。这使清理工作正常进行,因此我可以检出并重命名有问题的文件。

% rm *; rm -rf .svn/log; svn cleanup
% svn up Header_3_nobookmark.gif
A    Header_3_nobookmark.gif
Updated to revision 1087.
% svn mv Header_3_nobookmark.gif foo
A         foo
D         Header_3_nobookmark.gif
% svn up
A    spacer.gif
A    Header_3_noBookmark.gif

之后,我可以返回到项目的根目录,并运行" svn up"以检查其余部分。