SVN 有时会遇到更新整个目录的情况, 比如依赖的某个库有了新版本, 需要更新. 这个时候的处理可能需要注意一些问题.(直接跳到最后看结论)

举个例子:

根文件是 test, 里面用 externals 属性外链了一个 ext, ext 下面有一个 str 的文件夹, 这就是我们要更新的库了.

现在 str 的版本要更新, 怎么操作?

直接的想法:

在 ext 目录:

svn del str

将新版本拷贝过来:

svn add str

提交, 搞定.

ext里看log:

看起来也OK.

不过这样的做法, 如果其他 SVN 用户改过这个被替换的文件夹, 却没来及提交的话, 就可能会有些问题.

下面模拟一下上面这种情况下, 用户可能的操作流程.看看问题在哪里(结论在最后).

用户口 A 先修改一些文件, 没提交:

用户 B 用Delete+add方式更新的整个目录.这时用户 A up 了整个目录.

会产生冲突.

因为前面用的是delete, 这时,其实是很难resolve的.比如试试resolve一下, 只有文件夹信息, 没有对应文件的修改信息:

这里很难把自己的修改,与 SVN 服务器上的修改 Merge 起来.

那来试试 revert 吧.把冲突的文件 revert 总可以吧?

直接在顶层目录操作, revert!!!

结果却是无法revert :

再次在顶层目录 update 整个目录:

然后进入 str 目录, 发现 CFastString.h, CFastString.cpp 都已经是没有修改的, 而且是最新的. 因为更不到东西了嘛  

那这回直接 resolved 吧 :!.

resove完成~~

再次更新所有文件, 没有错误了.似乎一切正常了.

直到发现: str 目录下的文件一直是最旧的版本,而且死活 up 不下来最新的版本

如果提交,还会把 SVN 服务器上替换好的版本再次替换回来

什么地方出错了呢?

原因是: 当本地有修改的时候, svn 客户端无法完成 str 目录的替换操作. str 目录一直是删除前的那个.

在那个目录里, up 到最新也是 str 删除前的最新.所以 str 里的文件一直无法获得 svn 服务器上的最新版本. 即使服务器上有同名的 str 目录.

要注意的地方主要有:

1. 尽量改文件, 不改目录.

如果要更新某个库, 尽量不要 delete+add. 可以把旧版本的目录清空, 新版本的文件复制进来, 用TortoiseSVN 的 GUI 提交.

GUI里可以勾选missing的文件, SVN会自动删除. 这样可以把对目录的修改限制在比较小的范围. 让文件的log尽量连续.

2. 如果遇到别人使用 Delete+add更新某个目录, 自己如果修改过那个目录, 可以有两种方法避免上面的问题:

A. 删掉整个目录, 重新up.

B. 注意只可以在被 delete/add 的目录上层, 或者更上层的目录revert

 

SVN 如何更新整个目录的更多相关文章

  1. 解决svn更新项目目录时“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted”的报错问题

    今天在IDEA更新项目目录时,发现报错“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was ...

  2. windows,linux下SVN实现自动更新WEB目录

    通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率也低.使用SVN钩子脚本进行WEB目录同步,可很好的解决这方面的问题.由于测试机器 ...

  3. [转]svn 回退/更新/取消至某个版本命令详解

    1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) ...

  4. svn自动更新

    果对svn不熟悉,当svn上面有更新时,想看到实时效果,就得去web目录手动更新,比较麻烦 其它svn有一个自动更新的功能 利用 hook   在svn 仓库目录下面有一个hook目录 在post-c ...

  5. svn 回退/更新/取消至某个版本命令详解

    1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) ...

  6. svn 回退/更新/取消至某个版本命令详解【转】

    转自:http://www.cnblogs.com/mfryf/p/4654110.html 1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert - ...

  7. SVN自动更新-win平台

    把项目给外包做,他们天天整个ftp传来传去,上传一次还要到处翻View和Controller,还有漏传的情况,简直low到不行.看不下去了,就准备整个svn.虽然svn解决了上传的问题,但是自动发布还 ...

  8. svn自动更新服务器最新代码

    1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin    --svn安装目录(作者使用时TortoiseSVN客户端,其 ...

  9. linux 下svn同步更新钩子

    svn服务器搭建:https://www.linuxidc.com/Linux/2017-05/144254.htm SVN版本库中的一个项目:/svn/repositories/test/ 网站目录 ...

随机推荐

  1. 贯众云平台脚本编写之判断、循环以及shell命令的使用

    最近使用贯众云平台工具写脚本,进行Ui界面的自动化测试.刚开始接触,确实碰到不少的问题,稍微难点的就是判断语句,循环语句以及shell命令的使用,尤其是对于咱们测试这样比较少接触代码的人来说. 其实吧 ...

  2. Solr学习总结 Solr的安装与配置

    接着前一篇,这里总结下Solr的安装与配置 1.准备 1.安装Java8 和 Tomcat9 ,java和tomcat 的安装这里不再重复.需要注意的是这两个的版本兼容问题.貌似java8 不支持,t ...

  3. webstorm自动换行

    1.文件 — — 设置 2. 编辑器 — — 编辑器 — — 在编辑窗口使用软换行(勾选)

  4. Spring自定义注解扫描的实现

    目标:实现自定义spring自动扫描注解.主要为后期实现分布式服务框架自动注解提供技术支持 技术分析:通过配置组件扫描标签使spring解析标签. 1. JewelScanBeanDefaultPar ...

  5. Hive 元数据库表信息

    Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理. 1. 版本表 i) VERSION   -- 查询版本信息 2. 数据库.文件存储相关 i) DBS -- 存储 ...

  6. php上传多文件max_file_uploads限制问题

    在PHP程序中,常常会遇到这种问题,上传附件时明明成功上传了很多附件,如图片等,但实际上只存在20个附件,或者直接报错无法上传. 在DEDECMS5.7编辑图集的时候,发现只要超过20张图片保存就会出 ...

  7. 暗网 tor溯源困难根因——用户的请求会在分布全球的主机随机跳转三次,最终才到达服务器,这就造成了溯源的极其困难

    Tor(The Onion Router)可以说是目前最为流行的网络匿名访问技术,用户的请求会在分布全球的主机随机跳转三次,最终才到达服务器,这就造成了溯源的极其困难,从而使得所有的访问者完全没有身份 ...

  8. 利用expect和sshpass完美非交互性执行远端命令

    yum install expect -y expect 参考:http://blog.csdn.net/snow_114/article/details/53245466 yum install s ...

  9. line-height:150% 和 line-height:1.5的区别

    line-height:150% 是继承父元素的距离 line-height:1.5  是计算各子元素的距离 1.当line - height 为百分比时: body{ font-size:14px; ...

  10. LeetCode OJ:Tenth Line(文件第十行)

    How would you print just the 10th line of a file? For example, assume that file.txt has the followin ...