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

Rob*_*ker 244 svn

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

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

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control
Run Code Online (Sandbox Code Playgroud)

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

有什么我可以做的事情来尝试前进,不必检查存储库的新副本?

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

我希望有一种更积极的方式来进行清理,也许是某种程度上强制文件SVN在回到已知状态时遇到了麻烦(我尝试删除它的工作副本......这没有帮助).

小智 223

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

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

  • 对我来说,删除锁定文件就可以了.也许对某人感兴趣.您可以使用以下命令以递归方式删除它们:rm -rf`find.-type f -name lock` (9认同)
  • 我在这里得到了与原始问题类似的问题(由于svn结账中断).这为我修好了.虽然我也必须去父目录并在那里做同样的事情. (3认同)
  • +1我不能告诉你我在这种情况下有多少次.当它是一个子子文件夹没问题时,只需删除整个文件夹,清理并更新即可.但是当它是根级别的文件时,这不是一个便宜的选项(几个小时再次检查整个项目).神奇的提示 - 非常感谢. (2认同)
  • 我找不到`.svn/prop-base`我有`.svn/[pristine | tmp | entries | format | wc.db] (2认同)

JKo*_*plo 112

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

这是我做的似乎工作:

  1. 删除工作副本的.svn目录.
  2. 在新的临时目录中开始新的结帐.
  3. 取消结账(我们不想等待所有事情被拉下来).
  4. 在此取消的结帐时运行清理.
  5. 现在我们有一个带有干净数据库的新.svn目录(尽管没有/少数文件)
  6. 将此.svn复制到旧的已损坏的工作目录中.
  7. 运行svn update,它应该使您的新部分.svn目录与您的旧工作目录一致.

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

我刚刚在TSVN中做到这一点,它似乎工作正常,不需要完整的结帐和下载.

-Jody

  • 这就是为什么svn很糟糕 (97认同)
  • 我似乎每个月至少做两次.这样的痛苦.svn团队应该添加这些步骤`svn cleanup --force`.当然所有添加,删除和(1.8)重命名操作都会丢失. (8认同)
  • @Adgezaza是的.是的,它确实. (2认同)
  • 我重新安装了 SVN(Tortoise SVN 1.8),从我的项目中恢复了每个 ,svn 文件夹,然后执行了这里提到的操作,瞧!感谢作者! (2认同)

Siv*_*iva 107

看一眼

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. sqlite3 .svn/wc.db "select * from work_queue"

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

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

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

  • Firefox有[sqlite manager](https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/)扩展,可以打开和编辑.svn/wc.db文件.提供方便的GUI以在work_queue上执行等效操作. (8认同)
  • 对我来说'运行'从WC_LOCK删除'; 也是必需的. (5认同)
  • 我一次又一次地回到这个答案.对我而言,这应该是公认的答案. (3认同)

Mar*_*ett 42

如果一切都失败了:

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


小智 27

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

清理窗户


Ken*_*Ken 16

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

颠覆存储每个文件夹(在.svn文件)的信息,因此,如果你只是处理一个子文件夹你不需要检出整个仓库 - 只是具有borked文件夹:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir
Run Code Online (Sandbox Code Playgroud)

这将为您提供borked文件夹的良好工作副本,但您仍然可以在borked_dir.bak中备份您的更改.同样的原则适用于Windows/TortoiseSVN.

如果您在隔离文件夹中有更改,请查看

svn checkout -N borked_dir   # Non-recursive, but deprecated
Run Code Online (Sandbox Code Playgroud)

要么

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'
Run Code Online (Sandbox Code Playgroud)


小智 9

$ ls -la .svn
$ rm -f .svn/lock
Run Code Online (Sandbox Code Playgroud)

然后

$ svn update
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Dan*_*anJ 5

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

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

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


and*_*rej 5

您可能遇到两个文件名只有大写不同的问题.如果遇到此问题,则创建另一个工作副本目录无法解决问题.

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

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


Nik*_*sik 5

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

svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

所以我手动创建了这个文件(空)并svn cleanup再次做了。这次做的还行。