如何在ubuntu下用SVN [转]
sudo apt-get install subversion
假设你的项目工作路径(你刚开始建立的项目工作路径,没有进行过任何svn操作)为:/home/zzm/myproject
#建立一个名为 myproject 的 repository
svnadmin create /home/zzm/svn-repo/myproject
#把 /home/zzm/myproject 下的内容导入到svn的版本库中,并建立一个本项目的版本库,版本号是 1。
svn import -m "这是大爷的项目的第一个版本,刚刚导入的" /home/zzm/myproject file:///home/zzm/svn-repo/myproject
现
在我想跟你说一个概念,就是svn中的working
copy,实际上我们在上面一共建立了两个文件夹,一个是你的项目文件夹:/home/zzm/myproject,另一个是你的项目的版本库文件夹:
/home/zzm/svn-repo/myproject,这两个文件夹都不是所谓的working copy,真正的working
copy是负责直接和版本库进行同步和记录操作的,在working copy文件夹内,有一个隐藏的.svn文件夹。通常我都不是在working
copy文件夹里面直接操作,而是另一个地方编辑文件等,然后把在另一个地方改动的东西直接拷贝到working
copy里面,然后执行commit命令进行版本的维护。要建立你的working copy只有使用checkout命令:
#建立一个名为 my_working_copy 的 working copy
svn checkout file:///home/zzm/svn-repo/myproject my_working_copy
(根据你文件多少会有很多的输出,最后会告诉你当前你checkout的版本)
#实际上你可以使用checkout命令获得项目的任意一个版本的全部内容,执行命令:
svn checkout file:///home/zzm/svn-repo/myproject my_working_copy_version_number -r version_number
(version_number即是你所要获得的项目版本的版本号,比如1,2或者3等)
#如果你改变了你的working copy里面的内容,需要保存这次改变,即向版本库中添加一个版本,使用commit命令:
svn commit -m "大爷我添加了几张图片,更新了项目的企划"
(确保你终端当中的当前路径是你的working copy的路径,才能正确的执行本次命令)
#经过几次commit之后,你可能有很多的版本在版本库里面,通过输入下面的命令可以查看各个版本的情况:
svn log path
(path是你想要查询的working copy的路径,如果你在这个路径下面输入的命令,可以省略path)
----------------------------------
千万注意的内容:
你
在你的working copy目录中作文件操作时,比如删除或移动文件,不能直接用终端当中的命令 rm, mv 来进行,这样 svn
不能追踪到文件的变化,当你使用commit命令提交的时候,你不会得到任何的结果,想要让svn追踪你的变化你必须使用 svn del 或是 svn
move 来完成删除或移动的操作,比如:
# 我拷贝了一个文件到working copy中,需要让svn知道我拷贝了一个文件:
svn add filename
svn status -v 或者
svn status
# 其他的:
svn move filename /home/zzm/my_working_copy/new_folder/aa
svn rename filename1 filename2
svn del filename
有时候我们想丢弃对代码做过的改动。
分两种情况:
一、改动没有check in。这种情况下,我们使用svn revert就能把改动给扔掉了。
提示:CVS用户习惯于只把本地改动过的文件删掉,然后执行一次update来还原文件。在svn中也可以这么做,但最佳实践是执行svn
revert,这个操作会更安全也更迅速。因为update需要去连接服务器而你没有准备好接受新的改动,而svn
revert不会连接服务器也不会从服务器获取新的改动。
二、改动已经check in。
这种情况下,有多种办法可以进行撤销修改。一般我们推荐用svn merge来达成目的。
典型的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设是28版本。
2、然后找出要移除的确切版本:
svn log contacts.java
根据log怀疑是27版本改坏的,比较一下:
svn diff -r 26:27 contacts.java
发现果真是27版本坏事。
3、撤销27版本的改动:
svn merge -r 27:26 contacts.java
为了保险起见,再次确认合并的结果:
svn diff contacts.java
发现已正确撤销了改动,提交。
4、提交改动
svn commit -m "Revert wrong change from r27"
提交后版本变成了29。
svn log 展示给你主要信息:每个版本附加在版本上的作者与日期信息和所有路径修改。
svn diff 显示特定修改的行级详细信息。
svn cat 取得在特定版本的某一个文件显示在当前屏幕。
svn list 显示一个目录在某一版本存在的文件。
获得旧的版本库快照
除了以上的命令,你可以使用带参数--revision的svn update和svn checkout来使整个工作拷贝“回到过去”[8]:
$ svn checkout -r 1729 # Checks out a new working copy at r1729
…
$ svn update -r 1729 # Updates an existing working copy to r1729
posted on 2012-04-24 13:42 Richard.FreeBSD 阅读(81) 评论(0) 收藏 举报
浙公网安备 33010602011771号