linux的svn命令

目录

1.将文件checkout到本地目录  

2.将改动的文件提交到版本库  

3.添加新文件          

4.删除文件            

5.更新到某个版本      

6.加锁/解锁            

7.比较差异        

8.查看状态        

9.查看日志        

10.查看详细信息

11.查看版本库的文件列表  

12.创建纳入版本控制下的新目录  

13.恢复本地修改,恢复原始未改变的工作副本文件  

14.不checkout而查看输出特定文件或URL的内容  

15.解决冲突, 移除工作副本的目录或文件的“冲突”状态  

16.SVN回退版本,取消修改


大部分的发行版都已经提供Subversion套件,ubuntu下安装subversion客户端:
sudo apt-get install subversion

1.将文件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 dir

4.删除文件            

(命令: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.c

7.比较差异        

(命令: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的log

10.查看详细信息

  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
   
 

上一篇:python装饰器的使用


下一篇:ES6入门四:对象字面量扩展与字符串模板字面量