目录
大部分的发行版都已经提供Subversion套件,ubuntu下安装subversion客户端:
sudo apt-get install subversion1.将文件checkout到本地目录
(命令:checkout或co)
svn co http://路径(目录或文件的全路径) ./ (将目录或文件checkout到当前目录下)
(注意:如果没有指定本地目录,则将新建同名目录,然后checkout。比如:svn co http://..../hehe/ 会在
当前目录新建"hehe"文件夹)2.将改动的文件提交到版本库
(命令:commit或ci)
svn ci -m
(注意:必须有-m选项,-m选项后可以不加东西,也可以 svn ci -m "修改了a.txt")
linux版svn ci的log中添加回车的方法:svn ci -m $'This is the first line\nThis is the second line'
如果\n不行,则使用\r\n。3.添加新文件
(命令:add)
svn add *.c; svn ci -m (添加所有的.c文件)
svn add ./ --no-ignore --force; svn ci -m (添加本目录下所有文件)
(注意:add之后,要commit一下)
取消添加:
svn revert file
svn revert -R dir4.删除文件
(命令:delete或del或remove或rm)
svn del a.txt; svn ci -m
(注意:del之后,要commit一下)5.更新到某个版本
(命令:update或者up)
svn up (将当前目录下所有文件更新到最新版本)
svn up a.txt (将a.txt更新到最新版本)
svn up -r 200 a.txt (将a.txt文件更新到200版本)
A:add,新增
C:conflict,冲突
D:delete,删除
M:modify,本地已经修改
G:modify and merGed,本地文件修改并且和服务器的进行合并
U:update,从服务器更新
R:replace,从服务器替换
I:ignored,忽略6.加锁/解锁
(命令:lock/unlock)
svn lock -m "lock test.c" test.c
svn unlock test.c7.比较差异
(命令:diff或di)
svn diff test.c < - (修改的文件与基础版本比较)
svn diff -r 200:201 test.c (将200版的和201版的test.c进行比较)8.查看状态
(命令:status或st)
svn status (没错误则不显示东西。?:不在版本库 M:内容被修改 C:发生冲突 A:预定加入到版本库 K:被锁定)
svn status -v path (第一列相同,第二列显示工作版本,第三列是最后一次修改人,第四列是修改的文件)9.查看日志
(命令:log)
svn log
svn log a.c //查看a.c的log10.查看详细信息
svn info path (查看文件(夹)信息:URL、版本、修改者、修改时间等)
11.查看版本库的文件列表
(命令:list或ls)
svn list
12.创建纳入版本控制下的新目录
(命令:mkdir)
svn mkdir newdir
(注意:添加完子目录后,一定要回到根目录更新一下,不然在该目录下提交文件会提示“提交失败”
如果是用mkdir命令创建了文件夹,再使用svn mkdir newdir命令后,SVN会提示:
“svn:尝试用“svn add”或“svn add --non-recursive”代替?”
“svn:无法创建目录“hello”:文件已经存在”
此时,用如下命令解决:
svn add --non-recursive newdir
进入这个newsubdir文件夹,用ls-a查看它下面的全部目录与文件,会发现多了:.svn目录13.恢复本地修改,恢复原始未改变的工作副本文件
(命令:revert或rev)
svn rev test.c < - (丢弃对test.c的修改)
svn rev --recursive . < -(恢复一整个目录的文件,.为当前目录)14.不checkout而查看输出特定文件或URL的内容
(命令:cat)
svn cat http://文件全路径15.解决冲突, 移除工作副本的目录或文件的“冲突”状态
(命令:resolved或res)
例子:
$ svn update
C foo.c
Updated to revision 31.
如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件:
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31
当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。
你可以仅仅删除冲突的文件并且提交,但是svnr esolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。
注意:本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让PATH 可以再次提交.16.SVN回退版本,取消修改
取消对代码的修改分为两种情况:
第一种情况:改动没有被提交(commit)。
这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
# svn revert [-R] something
something可以是(目录或文件的)相对路径也可以是绝对路径。当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归)或者--depth=infinity,否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。
第二种情况:改动已经被提交(commit)。
这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设最新版本号是28。
2、然后找出要回滚的确切版本号:
svn log [something] 或者 svn log
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
3、回滚到版本号25:
svn merge -r 28:25 something (something可以用*来替代,表示回滚所有文件)
为了保险起见,再次确认回滚的结果:
svn diff -r 28:25 [something]
发现正确无误,提交。
4、提交回滚:
可以直接svn ci -m 来提交;也可以先修改再提交。都会更新到一个新的版本号
svn commit -m "Revert revision from r28 to r25,because of ..."
提交后版本变成了29。
将以上操作总结为三条如下:
1. svn update,svn log,找到最新版本(latest revision)
2. 找到自己想要回滚的版本号(rollbak revision)
3. 用svn merge来回滚: svn merge -r : something
相关文章
- 08-16如何为自己的pip包打造可以执行的系统命令
- 08-16WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等
- 08-16git安装及git命令的用法
- 08-16使用git svn工具进行svn 到git仓库的同步[持续更新]
- 08-16git命令行工具实现sourceTree上的各个功能
- 08-16Shell入门教程:流程控制(1)命令的结束状态
- 08-16使用的conda命令大全
- 08-16Vim常用的命令
- 08-16svn: Can't convert string from 'UTF-8' to native encoding 解决的方法
- 08-16windows 7 打开控制面板的命令