svn 在linux 下的一些常用命令

最近在Linux系统下玩一些svn的东西,感觉脑袋很乱, 于是整理了一下一些初学者必须弄明白的基本命令:

1. svn --version: 查看Linux系统下的svn client版本. Client端的版本应该与server端的版本保持一致,否则会出现一些bug, 比如说可能会出现不能svn commit的情况(真心花了好长时间才发现这个问题,真心是经验之谈,)。

  在client电脑上查看svn server 的版本的方法是在浏览器上输入"http://www.SERVER_NETWORK_ADDRESS.com/SVN_REPOS_ADDRESS/"。这个address可以在svn info命令下(Repository Root)找到。

 

2. svn co SERVER_PATH: 把目标服务器下的文件给check out(可以理解为下载)出来,到自己电脑。

  比如说check out了下列文件: a.txt, b.txt, c.txt, d.c,i.txt

 

3. 如何上传新的文件:

      第一步: 在checkout的目录下创建一新的,要上传的本地文件  touch e.txt

      第二步: svn add e.txt 出现结果“ A  e.txt”. A代表e.txt 预定加入(Add)到版本库(个人理解是把e.txt的信息加入到本地的.svn文件里面了,暂时还没有到svn server里面)。

      第三步: svn commit -m "注释信息". 这时才把local的 e.txt 上传到svn server. "-m "注释信息"“是必须的,不能少,否则出错。

      也可以 svn commit e.txt -m "注释信息", 不过这是仅仅把刚才的e.txt 上传到svn server. 假如第一步,我们创建了两个文件e.txt 和 f.txt, 第二步我们add   e.txt, f.txt, 那么svn commit e.txt -m "注释" 只上传e.txt, 而svn commit -m "注释信息" 上传所有的added 的文件。

                  svn commit 简称 svn ci 

 

4. 在上传文件后,如何删除文件:

      第四步:svn delelte a.txt 出现结果”D a.txt“. D 代表a.txt 被预定从版本库删除(Del). 然后看到本地目录下,a.txt 消失了,被svn 删除了。

      第五步:svn ci -m "注释信息", 把del信息传递到server, server 执行删除任务。

     做两个实验:

       a) 手动的右键在本地目录下删除b.txt, 然后执行svn ci, 结果没有任何响应。重新check out 一份整个目录(或者svn up),发现b.txt重新出现, 这表示不能傻乎乎的手动删除文件啊,无效的,一定遵循svn的规则(这一点非常重要,因为我们一些想当然的操作会导致一些不可预料的结果,经验之谈)

       b) 没有网络的时候,svn add 和 svn del 可以操作,但svn commit 不能操作。说明,add 和 del 两个svn动作在本地操作,而commit是联网行为。

 

5. 当我们修改完了一个check out 的文件,比如说, 在c.txt加入一句“Hello World!”, 如何更新svn server 里面的c.txt?

  svn ci c.txt -m "modify the c.txt". 

  总结,如果check out出来的文件,直接scn ci;如何某文件不是check out的文件,那么先需要svn add 然后在svn ci.

 

6. svn update -r VERSION path/filename: 更新到某一个版本(-r means revert). 注意到每一次我们svn ci,他都会有一个版本号.当我们debug里面的代码文件(比说d.c)无数遍后,发现最开始的代码最优雅,于是我们可以通过版本号恢复最初的设置:svn up -r 1232(最初的版本号) d.c. 但是其他a.txt,...文件还是最新版本,整个文件夹也是最新版本,只有d.c 是旧版本(有点绕,手动操作一下)。 那我们是不是要记录每一次的版本号呢?不用,svn log 会告诉我们不同时间的版本号,但是要写好每一次commit的注释信息,以便区分。

 

7. svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中(自己手动建立了一个文件,还没有加入到版本库,svn add 后, ?会变成A);M:内容被修改;C:发生冲突;A或D:预定加入或删除到版本库;K:被锁定】

 

8. svn log path: 显示每一次修改后的版本号和注释的信息

 

9. svn switch (sw) branch:把当前的branch转换到另外的branch. 因为很多人用一套svn server, 如果每个人都可以对Svn server 里面的代码随意改变的话,整个svn server的代码会很混乱。于是需要给每个人分配一个branch(甚至每个问题一个branch). 如果看当前的branch, 直接输入svn info,就很清楚啦。一般来说,我们最初check out 出来的branch叫做adb. 找到我们自己要工作的adb branch文件下的一些子目录,把adb branch switch 到我们的svn branch。需要practice. 

    note: 每次svn sw 之前,一定要svn ci 到svn server,否则下一次switch回来的时候,修改过的文件就不能svn ci 到server里面啦。(解决方法: 假如我们修改过i.txt, 在ci之前,我们sw到另外一个branch。 再sw回来,touch i.txt; svn revert i.txt;svn add i.txt; svn ci i.txt -m "recover the i.txt") 

 

10. svn diff path: 比如, 在改完a.txt后,暂时还没ci, 直接svn diff, 就可以看见之前改了什么。如果在ci之后,可以比较用如下形式: svn diff -r m:n a.txt(对版本m和版本n比较差异). 一定要在当前working copy 里面执行svn diff 命令。注意adb branch 和working copy(branch)同一个revision. 所以我们可以通过svn diff 在adb branch 和 working  copy 的区别. 其中, adb revision 是svn log 命令下第一个revision, 并不是当前的revision(因为当前adb branch 和working copy(branch)同一个revision).

 

Confusing, right? We need spend time playing around with SVN to master it. Better luck! 

 

转载于:https://www.cnblogs.com/biggerjun2015/p/5140547.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值