我有时遇到SVN的烦恼是工作副本被其中一个.svn文件夹从其原始位置移动而损坏。如果你小心并且使用适当的工具进行所有移动和重命名,它不会经常发生,但它仍然会不时发生。
首先,有人知道在提交完成之前是否有一个很好的方法来解决问题?巡航控制通常可以解决问题,但有很多情况下它无法捕捉到。
其次,如果我怀疑有一个文件夹,是否有一种快速简便的方法来检查不合适的.svn文件夹?我绝对可以通过根据编译器错误推断出哪个目录不合适,或者通过另一个干净的结帐来区分工作副本来手动完成。但是,这似乎是SVN可以在一秒钟内通过向我提供其工作副本中的父目录与其存储库中的父目录不匹配的所有目录的列表来诊断的问题。有一些方法可以让SVN给我一个这样的列表吗?
感谢。
答案 0 :(得分:3)
svn status
命令可以帮助解决这个问题。
例如,假设我有一个目录foo
,并且在存储库中它有子目录bar
和baz
。并且假设我在不告知SVN的情况下将baz
移动到bar
。然后,我得到:
$ svn status foo/
? foo/bar/baz
! foo/baz
?
foo/bar/baz
表示它存在于本地版本中但不存在于存储库中 - 更准确地说,它存在于本地副本的foo/bar
目录中,但是foo/bar/.svn
中的SVN信息没有记录。同样,!
foo/baz
表示它存在于存储库中(或者更确切地说,存在于foo/.svn
中的信息中),但缺少本地副本中的实际文件/目录
同时,如果问题只是一个.svn
文件夹本身丢失了,那就会显示出来:
$ svn status foo/
~ foo/quux
这意味着foo/.svn
表示应该存在foo/quux
,并且foo/quux
存在,但没有foo/quux/.svn
。
最后,如果问题是某个目录的.svn
指向其父级子目录以外的其他位置 - 比如你在该目录上做了svn switch
- 那么你会得到这个:
$ svn status foo/
S foo/quuux
如果您使用的是Windows并使用TortoiseSVN,则可以通过右键单击顶级目录并从弹出菜单中选择“TortoiseSVN - >检查修改”来获取相同的信息。已切换的内容(即错误的.svn
目录)将在其状态中显示为“normal(s)”。