标签 svn 下的文章

svn合并的问题

项目中采用了分支开发,上线前合并trunk到分支,上线后将分支代码合并回trunk。

合并中遇到的问题:

合并trunk到分支后,再将分支合并回trunk时会出现很多非本分支修改导致的冲突。

正确的操作流程:

  1. 合并trunk到分支。进入到分支目录,执行下面的命令。

    svn merge http://xxx/trunk
  2. 合并分支到trunk。进入到trunk目录,执行下面的命令。

    svn merge --reintegrate http://xxx/brancher/v1.0
  3. 分支修改后,需要再次合并分支代码到trunk。进入到trunk目录,执行下面的命令。

    svn merge http://xxx/brancher/v1.0

注意:

  1. 分支合并回trunk,第一次使用--reintegrate参数会只合并本分支的修改。
  2. 所有修改都应该在分支上进行,而不是在trunk上,否则会导致--reintegrate合并失败,进而会引发一堆其他分支代码导致的冲突。
  3. 所有的合并操作都应该使用svn merge来进行(windows下使用svn客户端操作),不允许拷贝分支上新增的文件到trunk上添加后提交。

windows下一个svn missing的灵异问题

在电脑上执行svn更新后,出现如图这么个错误。

svn missing

重新检出后仍有这个错误。

linux下检出svn,查看有问题的目录。

Cdn
cdn
test
...

呃,知道原因了,windows下目录是不区分大小写的,Cdn和cdn两个文件夹被合并了,导致svn以为少了一个目录。
真是好灵异的问题呀,解决方法,在linux下删除其中一个目录提交,windows下重新更新即可。

svn status 状态详解

status (stat, st): 显示工作副本中目录与文件的状态。

用法: status [PATH...]

未指定参数时,只显示本地修改的条目(没有网络访问)。
使用 -q 时,只显示本地修改条目的摘要信息。
使用 -u 时,增加工作版本和服务器上版本过期信息。
使用 -v 时,显示每个条目的完整版本信息。

输出的前七栏各占一个字符宽度。

每一栏的含义

  1. 第一栏: 表示一个项目是增加、删除,还是修改

    “ ” 无修改
    “A” 增加
    “C” 冲突
    “D” 删除
    “I” 忽略
    “M” 改变
    “R” 替换
    “X” 未纳入版本控制的目录,被外部引用的目录所创建
    “?” 未纳入版本控制
    “!” 该项目已遗失(被非 svn 命令删除)或不完整
    “~” 版本控制下的项目与其它类型的项目重名
  2. 第二栏: 显示目录或文件的属性状态

    “ ” 无修改
    “C” 冲突
    “M” 改变

- 阅读剩余部分 -

svn如何还原到上一个版本

开发中经常是会遇到还原到上一个版本的问题,每次都需要搜索一番,特整理记录下。

方法:

  1. 先查看当前版本是多少。

    svn up

输出结果如下。

Don@VM_198_11_sles10_64:~/> svn up
版本 32676。
  1. 还原到某个版本,这里以test.php文件为例,还原到历史版本32604。

    svn merge -r 32676:32604 test.php

输出结果如下。

Don@VM_198_11_sles10_64:~/> svn merge -r 32676:32604 test.php 
--- 正在反向合并 r32676,到 “test.php”:
U    test.php
  1. 查看当前修改文件。

    svn st

输出结果如下。

Don@VM_198_11_sles10_64:~/> svn st
M       test.php
  1. 提交修改。

    svn ci -m 'xxx' test.php

至此,test.php文件就被还原到32604版本了。