我有一个非常大的svn回购。当我尝试使用它(提交,更新等)时,它说有锁。
当我运行' svn cleanup'时,它说工作副本太旧了,我需要升级它。
当我运行'svn upgrade'时,它会运行,但不会说什么。
我还跑了' svnadmin升级'在回购上,以防万一。
我安装了最新的TortoiseSVN。
通常情况下,如果我有SVN的怪异,我会将文件移出,更新,移回文件,但正如我前面提到的,这是一个非常大的回购。
任何帮助都将不胜感激。
谢谢!
特定消息:
>svn update
svn: E155004: Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
svn: E155004: Working copy '*****' locked.
svn: E155004: '*****' is already locked.
>svn cleanup
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: The working copy at '*****' is too old (format 29) to work with client version '1.8.1 (r1503906)' (expects format 31). You need to upgrade the working copy first.
>svn upgrade
>
更新1 : 我安装了1.7.X客户端并尝试运行清理。它抱怨由于某种原因,回购不是一份工作副本。我尝试使用相同的1.7.X客户端进行更新,并收到以下消息:
>"c:\Program Files\SlikSvn\bin\svn.exe" update
svn: E155021: This client is too old to work with the working copy at '*****' (format 31).
You need to get a newer Subversion client. For more details, see http://subversion.apache.org/faq.html#working-copy-format-change
所以,这个客户端的东西是repo格式31. tortoisesvn认为它是格式29.现在我更加困惑。
更新2 : 回复@David W
Is this about a working copy or the repository?
工作副本。虽然我也试过svnadmin升级回购。但是,我使用的svnadmin是1.8.1。我只是尝试使用TortoiseSVN(1.8.10)升级回购,但这并没有解决问题。
is this about a file that's locked because someone locked it, or because your working directory is locked due to an incomplete
我是唯一一个使用回购的人,所以我知道没有其他人锁定它。这可能是由于操作不完整。
我用1.8.10运行svn状态,没有任何东西有' K'。有些文件带有' L&#39 ;,有一个带有'?'。列出的所有项目都是目录,而不是文件,但标有'?'的文件除外。
如果我运行&s; svn lock --force dirname',它会回应该特定节点"不是文件"。当我在标有'?'的文件上运行时,它回复说找不到该节点'。
Then, there is a locked working directory because of an incomplete operation...
是的,你打电话给它。这就是为什么所有的东西都标有“L'”,我收集。
当我进行清理(1.8.10)时,它给了我在我的intiial问题中报告的相同错误(格式29对于此格式31客户端来说太旧了)。
Remember that you can always delete a working directory and create a new one
是的。如果我删除工作副本中的任何目录并点击更新,它会抱怨它已被锁定。我无法清除锁定,原因是格式不匹配。理论上我可以重新检查整个仓库,然后复制回来,但回购是12GB(210,000个文件)。
Be careful about mixing up Subversion clients
所以,我没有意识到我有两个客户,但我只是只使用TortoiseSVN(1.8.10)。我今天才发现,当我尝试进行故障排除时,我有两个。
*更新3:解决方案* 使用@David W的提示,以下是我解决问题的方法: 1)备份我的.svn文件夹 2)从https://github.com/sqlitebrowser/sqlitebrowser/releases下载SQLite编辑器 3)打开我的wc.db文件并浏览WC_LOCK表。该表中有1个条目,我将其删除。 4)尝试使用TortoiseSVN(1.8.10)进行清理,之前曾抱怨锁定。它终于奏效了! 5)尝试在我的仓库中运行命令(更新,提交等),一切都很开心。
感谢所有帮助过的人,特别是@David W没有放弃我。
答案 0 :(得分:5)
我有一个非常大的svn回购。当我尝试使用它(提交,更新等)时,它说有锁。
这是关于 工作副本 还是 存储库 ?两件不同的事情。此外,这是关于一个文件被锁定,因为某人已锁定,或者因为您的工作目录由于不完整而被锁定
您可以在文件上设置 lock ,以防止您进行提交。在命令行中,您可以执行svn status
并查看锁定文件旁边的K
。然后,您可以使用svn lock --force
窃取该锁定,然后检查您的更改。 (只要存储库中没有钩子就可以阻止你窃取锁定。)
然后,由于操作不完整,存在锁定的工作目录。在这种情况下,当您执行L
时,您会看到svn status
。在这种情况下,您通常可以在该工作副本的根目录中执行svn cleanup
(.svn
文件夹所在的位置。)
请记住,您可以 始终 删除工作目录并创建新目录。混淆Subversion客户端要小心。有一段时间,它似乎并不那么重要,但在版本1.6,1.7,1.8和1.9中,工作副本的结构已经改变,可能与运行其他修订版的客户端不兼容。
是的。如果我删除工作副本中的任何目录并点击更新,它会抱怨它已被锁定。我无法清除锁定,原因是格式不匹配。理论上我可以重新检查整个仓库,然后复制回来,但回购是12GB(210,000个文件)。
删除目录然后执行svn up
并不能解决锁定问题。我打算删除整个工作目录,并重做svn co
。你不必检查整个回购。你只需要看看你需要什么。你需要所有210万个文件吗?我对此表示怀疑:
$ svn co http://server/repo # NOOOO!
$ svn co http://server/repo/trunk # A bit better, but do you need all
# the projects under Trunk?
$ svn co http://server/repo/trunk/foo # Now, I'm just checking out foo
$ svn co http://server/repo/trunk/bar # Now, I'm just checking out bar
这将检出两个工作目录:一个用于foo
,另一个用于bar
。
如果您确实想要检查整个主干,请使用--depth
稀疏地检查您需要的内容:
# Checking out trunk, but only getting the project directories
$ svn co http://server/repo/trunk --depth=immediates
$ svn up --set-depth=infinity foo
$ svn up --set-depth=infinity bar
这里我理论上检查了整个主干,但我只获得了空的主项目目录。我只从项目foo
和bar
获取文件。但是,foo
和bar
共享工作目录。我们假设我在foo
上开始了很长时间的更新,然后我转到bar
并尝试提交。我将收到一个警告,指出工作目录已被锁定。即使它们位于该工作目录的不同部分,我也无法在同一工作目录上执行两个单独的Subversion命令。
所以,我没有意识到我有两个客户,但我只是只使用TortoiseSVN(1.8.10)。我今天才发现,当我尝试进行故障排除时,我有两个。
如果安装了Tortoise,您还可以安装Subversion命令行客户端,这是一个可选的安装。我强烈推荐它!不要使用从其他地方下载的命令行客户端(比如SlikSVN或CollabeNet。并不是说这些客户端都不好。你应该使用你的版本附带的命令行客户端。 TortoiseSVN是为了保证两个Subversion客户端之间的一些奇偶校验。
很容易让这些感到困惑。您不应该在工作目录中使用svnadmin
命令。 svnadmin
用于服务器。你有的问题是严格的客户。
当Subversion从1.6移动到1.7到1.8现在变为1.9时,upgrade
会将您的工作目录升级为新格式。完成后,您无法恢复旧格式。您升级到1.8格式,1.7和1.6客户端将不再工作。
清理是为了帮助删除因Subversion客户端命令不完整而导致的锁定。