zoukankan      html  css  js  c++  java
  • [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下来;目录结构恢复正常

  • 相关阅读:
    hibernate和mybatis区别
    Spring事务的传播行为和隔离级别
    数组拷贝
    spring mvc 一次请求 两次查询
    手游性能之渲染分析3
    Android pm 命令详解
    Android am命令使用
    Android dumpsys命令详细使用
    java处理高并发高负载类网站的优化方法
    关于ArrayList的5道面试题
  • 原文地址:https://www.cnblogs.com/ZisZ/p/3270042.html
Copyright © 2011-2022 走看看