[trick] 玩弄svn的目录结构

今天在使用svn进行版本管理时出现了一个小问题:

  • 原本在s目录下有一个c目录,不知为何被删除了,而svn st命令并没有认为它消失,svn up命令也无法下载回来;
  • 从另一个地方拷贝过来一个c,svn st命令会认为c目录是新出现的,却又无法通过svn add命令加回到版本管理中;因为c目录下已经自带.svn版本,already under version control;
  • 把c下面的.svn删除,通过svn add命令加回,却无法svn commit, 405 Method Not Allowed;

简单想一下也能大概明白原因:svn的客户端与服务器端通过传输diff更新变化,除第一次svn co之外不再有机会进行强一致保证;而svn客户端又提供了一些命令对客户端的版本控制进行修改,(在不正确的操作下)可以导致客户端与服务器端的数据不一致;通常当出现代码冲突人工介入解决时,就是这样一种情况,只不过今天我遇到的是目录结构的冲突。

通过以下操作可以重现和解决这个问题:

$ cd s # 在s目录下进行操作

$ rm -rf c # 删除c目录;此时svn st命令会显示c目录消失

$ mkdir c # 新建一个c目录;此时svn st命令会显示c目录为异常的“~”状态

$ svn revert c # 不正确的操作;这时revert不会取消对c目录的修改,反而将c目录从版本控制中移除了,svn st命令会认为c目录是新出现的目录;这时查看.svn/entries,将无法找到c

$ rm -rf c # 这时svn st命令已经认为没有任何变化,而c目录已经消失了,且无法通过svn up命令获取回来;这就是我最初遇到问题的状态

$ mkdir c # 新建一个c目录;此时svn st命令会认为c目录为新出现的目录

$ svn add c # 将c目录加回到版本控制中;此时查看.svn/entries,可以找到c

$ rm -rf c # 将c目录删除;此时svn st命令会认为c目录缺失

$ svn co xxxxx/s/c # 将c目录重新co下来;目录结构恢复正常

原文地址:https://www.cnblogs.com/ZisZ/p/3270042.html