场景:
由于项目需要,将原工程拷贝副本,新建分支,利用eclipse+svn检出原工程后,断开链接,重新建立分支资源库后,建立连接,在将工程上传至分支资源库时由于网络原因(起初并不知道什么原因,目前也只是猜测是网络原因,过程并未报错且无法追踪),部分模块始终处于“check in......”状态,后来强制终止传输,并关闭IDE,当再次打开IDE,上传之前强制终止的模块时,报错如下:
“Attempted to lock an already-locked dir
svn: Working copy 'D:\workspace_deepfunc\ME_POS' locked ”
解决方法:
选中锁住的模块/项目,右键->Team->清理;
网络参考:http://www.cnblogs.com/maxinliang/p/3455285.html
1.出现这个问题后使用“清理”即"Clean up"功能,如果还不行,就直接到上一级目录,再执行“清理”,然后再“更新”。
2.有时候如果看到某个包里面的文件夹没有SVN的标志,直接用“Ctrl+Delete”手工删除,然后“清理”,最后“更新”或“提交”。
3.有时候有的文件死活无法提交和更新,有lock字样的提示,:首先点击该文件,然后getLock,再选中stealLock,然后release lock即可
4.教大家最狠的一招,在项目中如果是出现某个文件死锁的情况无法解决的情况下,叫开发中所有的人把文件上传了解锁了,清空版本库地址:安装目录:SvnTracsvnprojectsdblocks这个文件夹路径里面的全部内容。一切ok!
引申(参考:SVN锁):
1、SVN为什么要配置锁的概念?
使用之前在“复制-修改-合并 方案”一节中描述的“复制-修改-合并” 的方法,Subversion通常不需要锁就可以很好的工作。但是,在某些情况下你可能需要制定某种锁定策略。
-
例如,你使用图形文件等“不能合并”的文件。如果两个人修改同一个这样的文件,合并是不可能的,所以你丢失其中一个的修改。
-
您的公司过去一直使用一个锁定版本控制系统,并且已有一个 “锁定是最好的” 管理决策。
2、锁定在Subversion是如何工作的?
默认情况下,所有的东西都没有锁定,只要有提交权限的人都可以在任何时候提交任何的文件。其他人会定时更新他们的工作副本,在库中的改变的东西都会与本地合并。
如果你对一个文件 取得锁定,那么只有你可以提交这个文件。其他用户的提交都会被拒绝,直到你释放了这个锁。一个被锁定的文件不能在库中进行任何形式的合并。所以它不能除锁的拥用者之外的人删除或更名。
3、如何获取锁?
选择工作副本中你想要获取锁定的文件,然后选择命令 → .
出现一个对话框,允许你输入注释,这样别人可以知道你为什么锁定这个文件。注释是可选的,并且只用于基于Svnserve的库。当(且仅当)你需要窃取别人的锁的时候,勾选偷取此锁定复选框,然后点击 。
您可以设置项目属性 tsvn:logtemplatelock
给要填写如锁定信息的用户提供一个信息模板。
4、如何释放锁?
为了确保你不会忘记释放锁,你不需要做别的事,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。如果你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。如果你不希望释放某文件的锁,你可以取消选中它(如果你没有修改过)。如果你希望保持一个修改过的文件的锁,你需要在提交之前选中保持锁定复选框。
要手动释放锁定,选中工作副本中要释放的文件,选择命令 → 。不需要输入什么 TortoiseSVN会联系版本库并释放锁。你可以对一个文件夹来使用这个命令释放其中的所有锁定项。
5、如何查看锁状态
要查看你和他人所拥有的锁,你可以使用 → 命令。本地的锁定令牌会立即显示出来,要查看别人拥用的锁定(或是检查你的锁是否被破坏或窃取)你需要点击 。
从此处的右键菜单中,你可以获取锁或是释放锁,也可以破坏或是窃取别人的锁。