svn如何使用import目录作为工作拷贝+我的svn学习笔记

来源:互联网 发布:阳光网络伴我成长 编辑:程序博客网 时间:2024/04/16 14:53

转载出自:http://blog.chinaunix.net/uid-23842323-id-2656605.html

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


svn有Win和Linux的版本,这里讲的是后者,而且主要是命令行操作(不过通过命令行或者能更加理解svn的工作方式和原理),前者有乌龟这类图形工具,虽功能不全,但操作也确实简单。

需求分析

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

Solution

可能是因为个人有某种强迫症,偶还是一如继往地寻找方法企图解决这个问题,现在终于使用了一个小技巧搞定了,目前市场上还没有见到过这种方法,完全自创哦。方法如下(依然以最经典的helloworld工程为例) :

1. cd进入helloworld工程所在目录
2. 递归导入工程到版本库:
svn import helloworld svn://localhost/project -m "Just Test this Trick."
3. 执行最关键的命令(参数--depth=empty是精髓,它只初始化版本控制信息,不检出任何文件):
svn co --depth=empty svn://localhost/project helloworld
4. 然后进入工程目录:
cd helloworld
5. 执行命令:
svn st
然后显示所有文件前全带?号,因为此时这些文件还不在版本控制管辖范围内。
6. 因此我们将它们全部加入:
svn add *
现在所有文件前全显示为A标记,即为Add状态。
7. 为了与版本库一致,执行update命令(其实此时这些文件与现在版本库中是一模一样的,因为我们才刚刚提交完,没有作任何更改,此举是为了“骗过”svn):

svn up *或者

svn commit -m "first"

此时更新必然会有冲突,而且还是100%,程序提示“在 “xxx” 中发现冲突。选择: (p) 推迟,(mf) 全用我的,(tf) 全用他人的,(h) 使用帮助以得到更多选项:”,这时我们一定要选“(mf) 全用我的“,即输入mf,否则我们前面的工作就没有意义了。
8. 这时再用如下命令:
svn st
svn ci
命令均无显示,因为无状态变化,现在这个原始工程已经“转变“成一个work copy了。现在开始工作吧^_^。
原创粉丝点击