'svn cleanup'失败后该怎么办?

时间:2008-10-01 17:05:12

标签: 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无法恢复到已知状态(我尝试删除它的工作副本......但是没有帮助)。

31 个答案:

答案 0 :(得分:223)

当全身开始不是一个选项......

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

答案 1 :(得分:110)

SVN 1.7已经发生了变化,并且在移动到数据库工作副本实现时,删除.svn目录中的日志文件的流行解决方案是不可行的。

这就是我所做的似乎有效:

  1. 删除工作副本的.svn目录。
  2. 在新的临时目录中开始新的结帐。
  3. 取消结帐(我们不想等待所有内容被撤下)。
  4. 对此取消的结帐进行清理。
  5. 现在我们有一个带有干净数据库的新.svn目录(尽管没有/很少文件)
  6. 将此.svn复制到旧的已损坏的工作目录中。
  7. 运行svn update,它应该使您的新部分.svn目录与您的旧工作目录一致。
  8. 这有点令人困惑,过程明智。基本上,我们正在做的是删除损坏的.svn,然后为同一个结帐路径创建一个新的.svn。然后,我们将这个新的.svn移动到我们的旧工作目录并将其更新到repo。

    我刚刚在TSVN做过这个,它似乎工作正常,不需要完整的结账和下载。

    -Jody

答案 2 :(得分:105)

看看

http://www.anujvarma.com/svn-cleanup-failedprevious-operation-has-not-finished-run-cleanup-if-it-was-interrupted/

上述链接修复摘要(感谢Anuj Varma)

  
      
  1. http://www.sqlite.org/download.html安装sqlite命令行shell(sqlite-tools-win32)

  2.   
  3. sqlite3 .svn/wc.db "select * from work_queue"

  4.         

    SELECT应该将您的违规文件夹/文件显示为   工作队列。您需要做的是从工作中删除此项目   队列中。

         
        
    1. sqlite3 .svn/wc.db "delete from work_queue"
    2.         

      就是这样。现在,您可以再次运行清理 - 它应该可以工作。或者您   可以在出现提示之前直接进行您正在执行的任务   运行清理(添加新文件等)。

答案 3 :(得分:42)

如果一切都失败了:

  1. 查看新文件夹。
  2. 复制已修改的文件。
  3. 重新登录。
  4. 在删除它并使用新文件夹之前,将旧文件夹拉到某个地方(你永远不会知道+偏执狂是好的)。

答案 4 :(得分:26)

最新版本(我正在使用1.9.5)通过在清理菜单上添加“Break locks”选项来解决此问题。只需确保在清理时选中此复选框。

eclean up window

答案 5 :(得分:16)

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

Subversion存储每个文件夹的信息(在.svn中),所以如果你只是处理一个子文件夹,你不需要签出整个存储库 - 只是borked的文件夹:

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'

答案 6 :(得分:9)

$ ls -la .svn
$ rm -f .svn/lock

然后

$ svn update

希望有所帮助

答案 7 :(得分:5)

我遇到了完全相同的问题。我无法承诺,清理也会失败。

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

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

答案 8 :(得分:5)

您可能遇到两个文件名存在问题,这两个文件名的区别仅在于大写。如果遇到此问题,则创建另一个工作副本目录无法解决问题。

当前的Windows(即糟糕的)文件系统根本无法理解FilenameFILEname之间的区别。您有两种可能的修复方法:

  1. 使用真实文件系统(基于Unix)在平台上查看,重命名文件并提交更改。
  2. 当您在Windows中存储时,您可以在Eclipse SVN存储库浏览器中重命名文件,该浏览器可以识别差异并在那里重命名文件。
  3. 您也可以使用svn rename -m "broken filename case" http://server/repo/FILEname http://server/repo/filename
  4. 从任何命令行SVN客户端远程重命名有问题的文件

答案 9 :(得分:3)

我尝试通过控制台执行svn cleanup并收到如下错误:

svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
The system cannot find the file specified.

所以我手动创建了这个文件(空)并再次svn cleanup。这一次做得很好。

答案 10 :(得分:2)

每当我遇到类似问题时,我都会使用rsync(注意:我使用的是Linux或Mac OS X)来提供帮助:

# Go to the parent directory
cd dir_above_borked

# Rename corrupted directory
mv borked_dir borked_dir.bak

# Checkout a fresh copy
svn checkout svn://... borked_dir

# Copy the modified files to the fresh checkout
# - test rsync
#   (possibly use -c to verify all content and show only actually changed files)
rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/

# - If all ok, run rsync for real
#   (possibly using -c again, possibly not using -v)
rsync -av --exclude=.svn borked_dir.bak/ borked_dir/

这样你就有了新的结账,但是有相同的工作文件。 对我来说,这总是像魅力一样。

答案 11 :(得分:2)

<强> TL; DR

在终端中运行svn cleanup命令:

~/path/to/svn-folder/$ svn cleanup

我尝试了不同的解决方案,但无效

操作团队更新到头失败:

  

svn:E155004:'/ home / user / path / to / svn-folder'中有未完成的工作项;首先运行'svn cleanup'。

操作团队清理失败并出现同样的错误 注意:我的SVN版本是1.9.3。

对我有用的解决方案:在终端中运行 svn cleanup 命令

~/path/to/svn-folder/$ svn cleanup

命令成功。然后,Eclipse中的 Team Update 再次运行。

如果svn cleanup不起作用,请检查insert method

答案 12 :(得分:2)

我最近遇到了这个问题。对我来说,诀窍是选择“清理”后,在弹出的选项对话框中选中“Break Locks”,然后选择“OK”。它成功地为我清理了。

答案 13 :(得分:2)

我遇到了同样的问题。对我而言,原因是与EasySVN和(TortoiseSVN或仅SVN)发生冲突。我有自动更新并使用EasySVN提交(它无效)。

当我关闭它时,我无法清理,提交或更新。以上解决方案均无效,但重启确实有效:)

答案 14 :(得分:2)

我在Windows 7 64位上遇到了同样的问题。我以管理员身份运行控制台并从问题目录中删除了.svn目录(收到有关日志或其他内容的错误,但忽略了它)。然后,在资源管理器中,我删除了不再显示在版本控制下的问题目录。然后,我运行了更新,事情按预期进行。

答案 15 :(得分:2)

如果问题是区分大小写(在签出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.gifHeader_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以查看其余部分。

答案 16 :(得分:1)

Subclipse因Windows真正的恶魔锁定行为而感到困惑。 Unlocker是你的朋友。这可以找到锁定的文件并强制释放锁。

答案 17 :(得分:1)

我遇到了同样的问题。在互联网上搜索了一些below article之后。然后意识到我被记录为不同于我用来设置SVN的用户,基本上是一个权限问题。

答案 18 :(得分:1)

(在您尝试移动文件夹并进行新的结帐之前。)

删除有问题的文件所在的文件夹 - 是的,甚至删除.svn文件夹 在最顶层/父文件夹上执行svn cleanup

答案 19 :(得分:1)

当我遇到TortoiseSVN(Windows)的这个问题时,我转到Cygwin并从那里运行' svn cleanup ';它为我正确清理,之后一切都可以从TortoiseSVN开始。

答案 20 :(得分:0)

我刚从svn-xxxxxxxx文件夹中删除了文件~\.svn\tmp,其中xxxxxxxx是一个数字。

答案 21 :(得分:0)

在遇到类似问题时,存储库同步视图中的手动合并有助于解决问题。

一个文件名与其他文件名冲突,它明确提到了这个问题。将较新的文件重命名为其他名称可以解决它。

答案 22 :(得分:0)

它可能不适用于所有情况,但是当我最近遇到此问题时,我的“修复”是升级我的系统上的Subversion包。我一直在运行1.4.something,当我升级到最新版本(在我的情况下为1.6.6)时,结账工作正常。

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

答案 23 :(得分:0)

在上一个答案中有一些非常好的建议,但是如果你在Windows上遇到TortoiseSVN的问题(一个好的产品,但是......)总是回到命令行并首先做一个简单的“svn清理”

在许多情况下,Windows客户端不会运行清理命令,但使用SVN命令行实用程序清理工作正常。

答案 24 :(得分:0)

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

答案 25 :(得分:0)

这里的答案对我没有帮助,但在再次检查项目之前,我关闭并打开了Eclipse(Subversive是我的SVN客户端),问题就消失了。

答案 26 :(得分:0)

我通过将一些同事的.svn目录复制到我的目录中然后更新我的工作副本来解决了这个问题。这是一个很好,快速和干净的解决方案。

答案 27 :(得分:0)

sudo chmod 777 -R .能够更改权限。没有sudo,它就行不通,给我的错误与运行其他命令一样。

现在您可以执行svn update或其他任何操作,而无需废弃整个目录并重新创建它。这特别有用,因为您的IDE或文本编辑器可能已经打开了某些选项卡,或者存在同步问题。您不需要使用此方法废弃和替换您的工作目录。

答案 28 :(得分:0)

在浏览了这里引用的大多数解决方案后,我仍然遇到错误。

问题是case insensitive OS X。签出具有两个具有相同名称但大小写不同的文件的目录会导致出现问题。例如,ApproximationTest.java和Approximationtest.java不应位于同一目录中。一旦我们摆脱了其中一个文件,问题就会消失。

答案 29 :(得分:0)

不不不!如果您使用的是SVN 1.7或更高版本,则清理命令应该可以完成!

我还做了一些实验,发现解决方案(至少在Eclipse中)只针对错误消息中指定的文件夹而不是整个项目执行清理!

答案 30 :(得分:0)

我遇到了一个跟踪更新的问题,SVN显示文件夹存在冲突。奇怪的是,这只能通过命令行看到 - TortoiseSVN认为一切都很好。

#>svn st
!       my_dir
!       my_dir\sub_dir

svn cleanupsvn revertsvn updatesvn resolve都没有成功解决此问题。

我最终解决了以下问题:

  • 在.svn目录中查找“sub_dir”
  • 使用RC - &gt;要取消选中条目文件上的“只读”标志的属性
  • 打开条目文件并删除“未完成的...”行和相应的校验和
  • 保存并重新启用只读标志
  • 重复my_dir目录

之后,一切都很好。

注意我没有任何本地更改,因此如果您这样做,我不知道您是否有风险。我没有使用别人建议的删除/更新方法 - 我通过在my_dir / sub_dir / sub_sub_dir目录(以相同的症状开始)上尝试进入此状态 - 所以我不想冒险让事情变得更糟再次!

不完全是主题,但如果有人像我一样遇到这篇文章,可能会有帮助。