web服务器
技术随笔
服务器上svn up 失败,svn冲突
一、服务器上 svn up 报冲突(Node remains in conflict)
本地改了几个文件(含 api.php)提交到服务器,然后在服务器用 shell 脚本执行 svn up 时出错:
Skipped 'xxx' -- Node remains in conflict
At revision 1054.
Summary of conflicts:
Skipped paths: 1网上常见两种处理方式:
# 方式一:把工作副本备份后整体 revert 再 update
cd /home/svn/app/
mkdir /root/bak
mv /home/svn/app/* /root/bak/
svn revert .
svn up
# 方式二:对单个冲突文件出“绝招”
svn remove --force filename
svn resolve --accept=working filename
svn up方式一对整个工作副本操作,风险较大不敢用,于是直接用了方式二:
svn remove --force api.php; svn resolve --accept=working api.php; svn up结果 api.php 被删掉了,再 svn up api.php 也更新不回来(还好是在测试服务器)。继续试:
svn resolve --accept working api.php # 仍提示 Tree conflicts: 1
svn resolve --accept theirs-full api.php # 仍提示 Tree conflicts: 1参考 svn 中 tree conflicts 错误的原因。最后用 svn revert 取消变更,文件才回来:
svn revert api.php在本地给文件加两个空格(让内容发生变化可重新提交),提交后到 Linux 服务器上 svn up api.php,终于更新成功。
二、svn 冲突的几种解决办法
冲突一般发生在两人都改了同一处、后提交者 update 时。update 后会多出 1.txt.mine(我的修改)、1.txt.rOld(base 版本)、1.txt.rNew(最新版本),工作副本中的文件会带冲突标记:
<<<<<<< .mine
dfqerq
123dfwre
=======
dfqerq
123erwrq
>>>>>>> .r181、update 时直接处理(--accept)
--accept ARG : 指定自动冲突解决动作
(p) postpone - 保留冲突状态稍后处理
(df) diff-full - 显示 base 与冲突文件的全部差异
(e) edit - 用编辑器打开冲突文件
(r) resolved - 接受合并后的版本(解决冲突)
(mf) mine-full - 采用我的版本(丢弃对方改动)
(tf) theirs-full - 采用对方版本(丢弃我的改动)
(l) launch - 启动外部工具解决冲突2、先 update 再用 svn resolve
svn resolve --accept base 1.txt # 用 base 版本
svn resolve --accept working 1.txt # 手工改完后用当前副本
svn resolve --accept theirs-full 1.txt # 用最新版本
svn resolve --accept mine-full 1.txt # 用我的版本
svn resolve --accept mine-conflict 1.txt # 仅用我方冲突部分
svn resolve --accept theirs-conflict 1.txt # 仅用对方冲突部分3、svn revert 取消变更
svn revert 1.txt # 放弃本地修改,回退到版本库版本注意:tree conflict(树冲突)只能用 --accept working 解决,用 theirs-full 会提示 “Tree conflicts can only be resolved to 'working' state”。