首页 文章

当'svn cleanup'失败时我该怎么办?

提问于
浏览
238

我在工作文件夹中进行了很多更改,并且在尝试进行更新时遇到了麻烦 .

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

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

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

有什么我可以做的尝试并继续前进 without 必须检查存储库的新副本?

Clarification: 感谢有关将目录移开并删除新副本的建议 . 我知道这是一个选项,但它是我想避免的一个,因为嵌套了几个目录很多变化(这应该是一个分支......)

我希望有一种更积极的方式来进行清理,也许是某种程度上强迫文件SVN无法恢复到已知状态(我尝试删除它的工作副本......这没有帮助) .

30 回答

  • 1

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

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

  • 1

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

  • 0

    当我用TortoiseSVN(Windows)面对这个问题时,我去了Cygwin并从那里运行'svn cleanup';它为我正确清理,之后一切都可以从TortoiseSVN开始 .

  • 0

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

  • 0

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

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

  • 0

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

  • 110

    什么时候开始不是一个选择...

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

  • 9

    随着SVN 1.7的发生,情况发生了变化,移植到数据库工作副本实现时,删除.svn目录中日志文件的流行解决方案是不可行的 .

    这是我做的似乎工作:

    • 删除工作副本的.svn目录 .

    • 在新的临时目录中开始新的结帐 .

    • 取消结账(我们不想等待所有事情被拉下来) .

    • 在此取消的结帐时运行清理 .

    • 现在我们有一个带有干净数据库的新.svn目录(尽管没有/少数文件)

    • 将此.svn复制到旧的已损坏的工作目录中 .

    • 运行svn update,它应该使您的新部分.svn目录与您的旧工作目录一致 .

    这一切都有点混乱,流程明智 . 基本上,我们正在做的是删除损坏的.svn,然后为同一个结帐路径创建一个新的.svn . 然后,我们将这个新的.svn移动到我们的旧工作目录并将其更新到repo .

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

    -Jody

  • 101

    看一眼

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

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

    从http://www.sqlite.org/download.html安装sqlite命令行shell(sqlite-tools-win32)sqlite3 .svn / wc.db“select * from work_queue”SELECT应该显示你的违规文件夹/ file作为工作队列的一部分 . 您需要做的是从工作队列中删除此项 . sqlite3 .svn / wc.db“从work_queue中删除”就是这样 . 现在,您可以再次运行清理 - 它应该可以工作 . 或者,您可以在提示运行清理之前直接执行您正在执行的任务(添加新文件等)

  • 0

    如果一切都失败了:

    • 签出一个新文件夹 .

    • 复制已修改的文件 .

    • 重新登记入住 .

    • 在删除它并使用新文件夹之前,将旧文件夹拉到某处(你永远不会知道偏执狂是好的) .

  • 25

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

    eclean up window

  • 1

    这个答案仅适用于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'
    
  • 222
    $ ls -la .svn
    $ rm -f .svn/lock
    

    然后

    $ svn update
    

    希望能帮助到你

  • 41

    我有同样的问题 . 我无法承诺,清理会失败 .

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

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

  • 16

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

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

    • 使用真实文件系统(基于Unix)检查平台,重命名文件并提交更改 .

    • 当您备份到Windows时,您可以在Eclipse SVN存储库浏览器中重命名文件,该浏览器可以识别差异并在那里重命名文件 .

    • 您也可以使用 svn rename -m "broken filename case" http://server/repo/FILEname http://server/repo/filename 从任何命令行SVN客户端远程重命名有问题的文件

  • 5

    我试图通过控制台做 svn cleanup 并得到一个错误,如:

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

    所以我手动创建了这个文件(空)并再次做了 svn cleanup . 这次它完成了 .

  • 5

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

  • 3

    如果问题是区分大小写(在签出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 isn 't the problem here… It just can' t将上一个错误移到下一个文件 . 所以我删除了 .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

    我太碰到了 . 对我来说,诀窍是选择“清理”后,在弹出的选项对话框中选中“Break Locks”,然后选择“OK” . 它为我成功清理了 .

  • 2

    我有同样的问题 . 对我而言,原因是与EasySVN和(TortoiseSVN或仅SVN)发生冲突 . 我有自动更新和提交EasySVN(这是无法正常工作) .

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

  • 2

    TL;DR

    在终端中运行 svn cleanup 命令:

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

    I tried different solutions 在这里解释,但 none worked .

    行动小组→更新到头部失败:

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

    Action Team→清理失败并出现相同的错误 .
    注意:我的SVN版本是1.9.3 .

    解决方案对我有用: run svn cleanup command in a terminal

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

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

    如果 svn cleanup 不起作用,请检查Chris's answer .

  • 1

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

  • 0

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

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

  • 0

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

    #>svn st
    !       my_dir
    !       my_dir\sub_dir
    

    svn cleanupsvn revertsvn updatesvn resolve 都没有成功解决这个问题 .

    一世最终解决了以下问题:

    • 在.svn目录中查找"sub_dir"

    • 使用RC - >属性取消选中条目文件上的'read only'标志

    • 打开条目文件并删除行"unfinished ..."和相应的校验和

    • 保存并重新启用只读标志

    • 对my_dir目录重复上述步骤

    之后,一切都很好 .

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

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

  • 0

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

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

  • 0

    我做了 sudo chmod 777 -R . 以便能够更改权限 . 没有 sudo ,它将无法正常工作,给我与运行其他命令相同的错误 .

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

  • 0

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

  • 2

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

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

  • 2

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

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

相关问题