专家指导:Svn使用import作为工作拷贝

本节向大家介绍一下Svn import子命令使用情况,即Svn如何使用import目录作为工作拷贝,主要包括前奏,需求分析和解决方案等内容,在这里拿出来和大家分享一下,希望对大家有用。

前奏

svn作为一款极其优秀的开源版本控制系统,应用广泛,从组织到个人遍及各行各业。因此学习和熟练掌握它,对提高我们日常工作效率和数据安全非常重要,尤其对开发人员协同管理Project的文档,代码,各类图等,能达到事半功倍的效果。不必再每天完成工作后,打包工程目录,备份每天的版本;也不用几个人堆在一起效率低下地手工合计代码;也不用担心偶尔因忘记打包,而丢失宝贵的数据资料。现在笔者已经养成完全使用svn管理日常的一些小项目,即使是个人使用,因为实在是不想每次都打包了,然后找数据再去一堆压缩包里去找。
svn有Win和Linux的版本,这里讲的是后者,而且主要是命令行操作(不过通过命令行或者能更加理解svn的工作方式和原理),前者有乌龟这类图形工具,虽功能不全,但操作也确实简单。

需求分析

看一下Svn import子命令需求分析,为了避免手工管理一个我们日益变大的项目,于是我们选择svn,让程序为我们自动控制版本并记录下更改记录。但每当使用import子命令将工程导入到svn时,我们遇到一个极其恶的问题:将本地的工程目录全部提交上去之后,但是这个原始工程目录却不是工作拷贝,于是我还得把这个原始工作目录删掉,重新从版本库中checkout出来一个拷贝。这太不爽了,暂且不论这个工程占多大磁盘空间,明明有这个工程,只是缺少版本控制信息,有必要就删掉而重新检出整个工程么。于是我在google再google,但始终没有找到解决方法,后来了解到,svn本来就没有考虑过这个问题,貌似就只能删掉原始工程目录,而重新从库中检出一个带版本控制信息的一模一样的工程。

Solution

下面我们看一下Svn import子命令的解决方案,可能是因为个人有某种强迫症,偶还是一如继往地寻找方法企图解决这个问题,现在终于使用了一个小技巧搞定了,目前市场上还没有见到过这种方法,完全自创哦。方法如下(依然以最经典的helloworld工程为例):
1.cd进入helloworld工程所在目录
2.递归导入工程到版本库:svnimporthelloworldsvn://localhost/project-m"JustTestthisTrick."
3.执行最关键的命令(参数--depth=empty是精髓,它只初始化版本控制信息,不检出任何文件):svnco--depth=emptysvn://localhost/projecthelloworld
4.然后进入工程目录:cdhelloworld
5.执行命令:svnst然后显示所有文件前全带?号,因为此时这些文件还不在版本控制管辖范围内。
6.因此我们将它们全部加入:svnadd*现在所有文件前全显示为A标记,即为Add状态。
7.为了与版本库一致,执行update命令(其实此时这些文件与现在版本库中是一模一样的,因为我们才刚刚提交完,没有作任何更改,此举是为了“骗过”svn):svnup*此时更新必然会有冲突,而且还是100%,程序提示“在“xxx”中发现冲突。选择:(p)推迟,(mf)全用我的,(tf)全用他人的,(h)使用帮助以得到更多选项:”,这时我们一定要选“(mf)全用我的“,即输入mf,否则我们前面的工作就没有意义了。
8.这时再用如下命令:svnst,svnci
命令均无显示,因为无状态变化,现在这个原始工程已经“转变“成一个workcopy了。现在开始工作吧^_^。Svn import子命令的使用情况在这就介绍完了,希望对你有所帮助。

  【编辑推荐】

  1. 学习笔记:详解客户端Subversion命令行的使用一
  2. 学习笔记:详解客户端Subversion命令行的使用二
  3. 分类汇总:Linux下Subversion命令大揭秘 上篇
  4. 分类汇总:Linux下Subversion命令大揭秘 下篇
  5. Subversion新理念及安装问题简单剖析

 

THE END