" svn清理"失败时该怎么办?
我在工作文件夹中进行了很多更改,并且尝试进行更新时搞砸了。
现在,当我发出" 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脚的)文件系统根本无法理解Filename
和FILEname
之间的区别。我们有两个可能的修复:
- 在具有真实文件系统(基于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"以检查其余部分。