SVN 如何更新整个目录
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 如何更新整个目录的更多相关文章
- 解决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 ...
- windows,linux下SVN实现自动更新WEB目录
通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率也低.使用SVN钩子脚本进行WEB目录同步,可很好的解决这方面的问题.由于测试机器 ...
- [转]svn 回退/更新/取消至某个版本命令详解
1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) ...
- svn自动更新
果对svn不熟悉,当svn上面有更新时,想看到实时效果,就得去web目录手动更新,比较麻烦 其它svn有一个自动更新的功能 利用 hook 在svn 仓库目录下面有一个hook目录 在post-c ...
- svn 回退/更新/取消至某个版本命令详解
1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) ...
- svn 回退/更新/取消至某个版本命令详解【转】
转自:http://www.cnblogs.com/mfryf/p/4654110.html 1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert - ...
- SVN自动更新-win平台
把项目给外包做,他们天天整个ftp传来传去,上传一次还要到处翻View和Controller,还有漏传的情况,简直low到不行.看不下去了,就准备整个svn.虽然svn解决了上传的问题,但是自动发布还 ...
- svn自动更新服务器最新代码
1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin --svn安装目录(作者使用时TortoiseSVN客户端,其 ...
- linux 下svn同步更新钩子
svn服务器搭建:https://www.linuxidc.com/Linux/2017-05/144254.htm SVN版本库中的一个项目:/svn/repositories/test/ 网站目录 ...
随机推荐
- HttpServletResponse response详解
//内容类型和编码格式可以被调用多次,最后一次将覆盖之前的设置 //内容类型和编码格式必须在 //设置内容类型getWriter和getOutputStream方法之前调用,否则不起作用 //若未设置 ...
- 永久以管理员身份运行cmd
系统:win7 1,下图输入 cmd,找到cmd 2,发送到桌面快捷方式 3,在桌面上的cmd,右键,属性 点高级,进入后,勾上 管理员.
- linux五大搜索命令学习
五大搜索命令学习 分别解释locate,find,which,whereis,grep 五大linux搜索命令 locate 解释:由man手册可以看出,locate查找就是根据文件名进行查找,只是依 ...
- Python之NumPy(axis=0 与axis=1)区分
转自:http://blog.csdn.net/wangying19911991/article/details/73928172 https://www.zhihu.com/question/589 ...
- Mysql之select
SELECT {*|<字段列表>} [ FROM <表1>,<表2>,…,<表n> WHERE <表达式> GROUP BY ...
- 详解offset
offset offset 译为“偏移量”,是javascript很重要的一个概念.涉及到便宜量的主要有offsetLeft.offsetTop.offHeight.offsetWidth这四个属性还 ...
- C++复习2.软件开发知识小节
高质量的软件开发 1.满足正确性,健壮性,可靠性,性能,易用性,清晰性,安全性,兼容性,扩展性,可移植性等等来评价软件的质量. 2.没有错误的程序世间难求,任何一个程序,无论他多么的小,总是存在着错误 ...
- 快速切题 poj 2485 Highways prim算法+堆 不完全优化 难度:0
Highways Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23033 Accepted: 10612 Descri ...
- bzoj1800
题解: 暴力枚举,然后判断是否是矩形 代码: #include<iostream> #include<cstdio> using namespace std; ],dis[]; ...
- jQuery Ajax同步参数导致浏览器假死怎么办
俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的 ...