“ svn清理”失败时该怎么办?


245

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

现在,当我发出“ 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文件无法恢复到已知状态(并且我尝试删除该文件的工作副本……这无济于事)。


回复:使用新副本。获取一份“不可比较”的副本,以比较彼此的版本
Jon Winstanley,2010年

2
阿敏的解决方案对您不起作用吗?当然是接受其他答案的明显答案吗?
爱丽丝·珀塞尔

2
确保任何文件都不会被应用程序打开,这很容易忘记。进程浏览器和对路径的快速搜索对于发现以下内容非常有用:technet.microsoft.com/en-us/sysinternals/bb896653.aspx
angularsen 2012年

4
恕我直言,“ svn cleanup”命令的存在是对失败的承认。
yoyo 2014年

Answers:


223

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

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


3
我在这里遇到了与原始问题类似的问题(由于svn检出中断)。这为我解决了。尽管我还必须转到父目录并在该目录中执行相同的操作。
奈杰尔·霍金斯

2
+1我无法告诉您我在这种情况下已有多少次了。当它是一个子文件夹没有问题时,只需删除整个文件夹,清理并更新即可。但是,当它是根级别的文件时,这不是一个便宜的选择(几个小时后再次检出整个项目)。很棒的提示-非常感谢。
伊万·麦克和平

9
对我来说,删除锁定文件做到了。也许有人感兴趣。您可以使用以下命令递归删除它们:rm -rffind . -type f -name lock
H6。

1
happy-coding的命令不起作用。这样做是:sudo rm -rf | find . -type f -name lock
Zachary Schuessler

2
我找不到.svn/prop-base.svn/[pristine|tmp|entries|format|wc.db]
bigpony

112

SVN 1.7改变了一切,并且流行的删除.svn目录中的日志文件的解决方案对于迁移到数据库工作副本实现不可行。

这是我所做的似乎可行的工作:

  1. 删除工作副本的.svn目录。
  2. 在新的临时目录中开始新的签出。
  3. 取消结帐(我们不想等待所有事情都被撤消)。
  4. 对已取消的结帐进行清理。
  5. 现在我们有了一个带有干净数据库的新.svn目录(尽管没有文件)
  6. 将此.svn复制到损坏的旧工作目录中。
  7. 运行svn update,它将使您的新的.svn部分目录加​​快与旧的工作目录的速度。

这在流程方面有点令人困惑。本质上,我们正在做的是删除损坏的.svn,然后为同一签出路径创建一个新的.svn。然后,我们将这个新的.svn移到我们的旧工作目录中,并将其更新到仓库中。

我只是在TSVN中执行此操作,它似乎可以正常运行,并且不需要完整的签出和下载。

-乔迪


8
我似乎每月至少执行两次。真痛苦 svn小组应添加这些步骤svn cleanup --force。当然,所有添加,删除和(带有1.8)重命名操作都将丢失。
马丁

2
@Adgezaza是的。是的,它确实。
mjs

1
这为我解决了。有点不同:更改svn后,1个特定文件夹的更新失败。删除该文件夹,一切都很好
晃龙

@Pup,应该。本质上,您只是拉下元数据以进行新的签出,然后用文件填充它。SVN将确定文件是否与元数据匹配。但是,您知道,首先将所有内容压缩,以防万一...
JKoplo 2015年

1
我重新安装了SVN(Tortoise SVN 1.8),从项目中删除了每个.svn文件夹,然后执行此处提到的操作,瞧!感谢作者!
德米特里(Dmitry)

110

看一眼

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命令行外壳(sqlite-tools-win32)

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

SELECT应该显示您有问题的文件夹/文件作为工作队列的一部分。您需要做的是从工作队列中删除该项目。

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

而已。现在,您可以再次运行清理–它应该可以工作。或者,您可以直接执行正在执行的任务,然后提示运行清除(添加新文件等)。


请注意,不鼓励仅链接的答案,因此,SO答案应该是搜索解决方案的终点(与引用的另一种中途停留不同,随着时间的流逝,它们往往会过时)。请考虑在此处添加独立的摘要,并保留该链接作为参考。
kleopatra 2014年

8
Firefox具有sqlite管理器扩展,可以打开和编辑.svn / wc.db文件。提供方便的GUI来对work_queue进行等效操作。
Magicianeer 2014年

如果您使用的是SVN和Firefox的最新版本,sqlite管理器插件将在30秒内解决此问题。不必担心删除目录或使用Repobrowser。在2016年,我认为这应该是公认的答案
仲裁2016年

5
对我来说,运行“从WC_LOCK删除;” 也是必需的。
Tristan.Liu,2016年

完美地工作!SVN很烂!但是从work_queue svn中删除后,给我另一个错误“ svn已锁定”,只需运行乌龟(eclipse没有该选项),然后选中“ break locks”进行清理
amdev

42

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

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

27

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

清理窗口


现在看来太明显了!谢谢
Billy Jake O'Connor

像魅力一样工作!
Viswanath

对我来说效果很好。
谢尔盖

工作了!当我看到此解决方案时,我立即知道问题出在哪里……(我认为):我还有一个excel仍在打开,可以对其进行修改。我想将更改提交到一些Java文件,然后看到excel文件,就像“我在那里什么都没有更改...还原”。哪个没有用,然后我意识到它仍然是打开的,将其关闭,F5,再也没有出现在提交中,所以继续提交。然后它告诉我“ pls run cleanup”,从那以后我被困住了。那谢谢啦!:)
BAERUS

16

此答案仅适用于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'

使用您的建议“节省了大量时间”(如果您只需要处理一个子文件夹,则无需签出整个存储库)
iBabur

这对我有用-我所做的只是位于不同选项卡svn up中间的相同回购协议svn up-我忘记了这样做,而前一天晚上还没完成。
Jon

不再正确-在最新版本中,SVN现在仅使用一个.svn目录。
ŁukaszBachman

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

然后

$ svn update

希望能帮助到你


6

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

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

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


我放弃了那棵树,最后得到了一棵新的树。但是,感谢您暗示下次需要检查的内容。
罗伯·沃克,

ha ...我什至将.svn \ pristine区域中的文件夹从{name}重命名为{name} _old,然后又恢复为原始的{name},它起作用了
beauXjames

5

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

当前的Windows(即蹩脚的)文件系统根本不神交之间的差异FilenameFILEname。您有两个可能的修复:

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

原来这是我的问题。一位同事设法以某种方式检入了几个Xcode项目文件,每个文件有两个副本,只是字母大小写不同。我使用TortoiseSVN浏览存储库并删除了多余的文件。然后,我删除了包含重复文件的本地文件夹,并且svn更新终于成功了。
kgriffs

不只是Windows问题。这也影响Mac。Macs HFS +文件系统默认情况下也不区分大小写,但保留大小写。为了避免这些问题,我在硬盘驱动器上设置了第二个分区,该分区执行区分大小写的文件名。
David W.

4

svn cleanup在终端中运行命令(如果我的情况是从Eclipse失败):

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

我尝试了这里介绍的其他解决方案,但是没有一个有效

行动小组更新负责人失败:

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

动作小组清理失败,并出现相同的错误。

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

命令成功。

然后TeamUpdate在Eclipse中再次起作用。

注意:我的SVN版本是1.9.3。

如果不起作用,还请检查克里斯的答案svn cleanup


3

我尝试svn cleanup通过控制台进行操作,但出现类似以下错误:

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

因此,我手动创建了此文件(空),然后svn cleanup再次创建。这次完成了。


3

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

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


Yaaaaay jimi,你是我的英雄。
TRoa

2

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


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以检出其余部分。


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/

这样,您就可以进行全新的结帐,但是具有相同的工作文件。对我而言,这始终像一种魅力。


2

我最近遇到了这个问题。对我来说,诀窍是在选择“清理”之后,在弹出选项对话框中,选中“中断锁定”,然后单击“确定”。它为我成功清理了。


1
SVN本身没有弹出对话框。也许您正在使用Tortoise。OP正在使用命令行客户端,因此您的建议不是很有帮助。
罗伯特

1

Windows真正的破坏性锁定行为使Subclipse感到困惑。解锁是您的朋友。这样可以找到锁定的文件并强行释放锁定。


1

(在尝试移动文件夹并进行新的签出之前。)

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


1

我遇到了同样的问题。在Internet上搜索后,发现以下文章。然后意识到,我以与以前用来设置SVN的用户不同的用户身份登录,这基本上是一个权限问题。


1

当我面对TortoiseSVN(Windows)的问题时,我去了Cygwin并从那里运行“ svn cleanup ”。它会为我正确清理,然后一切都可以从TortoiseSVN正常进行。


这也适用于cmd窗口。我不知道为什么当Tortoise失败时它会起作用,但有时会起作用。
Watusimoto '16

0

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


0

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

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



0

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

问题是不区分大小写的OSX。检出包含两个名称相同但大小写不同的文件的目录会导致问题。例如,ApproximationTest.java和Approximationtest.java不应位于同一目录中。一旦我们摆脱了其中一个文件,问题就消失了。


0

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

#>svn st
!       my_dir
!       my_dir\sub_dir

svn cleanupsvn revertsvn update并且svn resolve都在解决这个不成功的。

我最终解决了如下问题:

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

之后,一切都很好。

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

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


0

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

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


今天这对我有用,所以我要+1。另一方面,我又一次进入循环正好相反—我需要右键单击文件夹,然后在需要右键单击空白处时选择“清除”。因此,这在很大程度上取决于具体情况。
达芙妮B

downvote,因为“在svn清理失败时如何解决问题”的答案不是“应该工作”
mjs

0

我确实sudo chmod 777 -R .能够更改权限。没有sudo,它将不起作用,给我与运行其他命令相同的错误。

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


0

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


0

在前面的答案中有一些非常好的建议,但是如果您在Windows上使用TortoiseSVN遇到问题(一个很好的产品,但是...),则始终退回到命令行并首先执行简单的“ svn清理”。

在许多情况下,Windows客户端不会运行cleanup命令,但是使用SVN命令行实用工具进行清理可以正常工作。


0

面临类似问题时,在存储库同步视图中进行手动合并有助于解决此问题。

一个文件名与另一个文件名冲突,并且清楚地提到了该问题。将较新的文件重命名为其他名称可以解决该问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.