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. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 A题 Weather Patterns

    2017-09-25 15:49:45 writer:pprp 阅读理解,当时没有耐心去读,只要能读懂就大概可以做出来 题意如下: 有四种天气, State 1: snow State 2: rain ...

  2. 自学Java测试代码二String, StringBuffer

    2017-08-23 10:38:01 writer:pprp package test; import java.util.*; public class test2 { public static ...

  3. 利用Object.defineProperty实现Vue数据双向绑定

    body部分很简单,一个输入框和一个展示的div <div> <p>你好,<input id='nickName'></p> <div id=&q ...

  4. IIS和ASP.NET MVC 管道处理模型

    转载自  博客园 青羽 http://www.cnblogs.com/tenghoo/archive/2009/11/04/IIS_And_ASPNET_Http_Runtime_Pipeline.h ...

  5. angularjs定时任务的设置与清除

    人们似乎常常将AngularJS中 的$timeOut()  $interval()函数看做是一个内置的.无须在意的函数.但是,如果你忘记了$timeOut()$interval()的回调函数将会造成 ...

  6. 【转】TCP那些事(上,下)

    TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获.关于TCP这个协议的细节,我还是推荐你去 ...

  7. 百度地图API学习总结

    常用技术   1.创建地图: var map = new BMap.Map("divid"); 2.创建坐标点:var point = new BMap.Point("经 ...

  8. flask学习(五):使用配置文件

    1. 新建一个config.py文件 2. 在主app文件中导入这个文件,并且配置到app中,示例代码如下: import config app.config.from_object(config) ...

  9. IOS-加载动态图(gif)

    // // BowenView.h // IOS_0302_下拉刷新 // // Created by ma c on 16/3/2. // Copyright © 2016年 博文科技. All r ...

  10. 初次学习AngularJS

    一.指令1.AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-app 指令定义了 AngularJS 应用程序的 ...