最近在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!

svn 在linux 下的一些常用命令的更多相关文章

  1. Linux下Vim工具常用命令

    原文地址: http://www.cnblogs.com/lizhenghn/p/3675011.html 在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚 ...

  2. Linux下C++开发常用命令

    本页面记录本人在Linux下进行C++开发时使用的常用命令,注意这里不包括比如ls,mv等linux命令,这里会持续更新.首先假设你只有一个源程序文件,叫vec.cpp,编译后的可执行程序叫vec(本 ...

  3. Linux下的一些常用命令(一)

    在Linux环境下敲各种命令是再正常不过了,尤其是现在大多少服务器均为Linux系统,但是我又记不住这么多命令,只是偶尔在项目做完发布到服务器上的时候会涉及到,所以在网上找了一些命令,在此记录一下~ ...

  4. 查看Linux下系统资源占用常用命令(top、free、uptime)

    本文介绍下,在linux中查看系统资源占用的三个命令:top.free.uptime,通过实例学习下它们的用法,有需要的朋友参考下 一,top命令 1.作用top命令用来显示执行中的程序进程,使用权限 ...

  5. 总结Linux 下Redis 操作常用命令(转)

    Redis的配置 Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# tar xzf redis-2.8 ...

  6. 查看Linux下系统资源占用常用命令

    一 top命令 1.作用top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数d:指定更新的 ...

  7. Linux下安装maven-及常用命令

        Linux下安装maven1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令: 2. ...

  8. Linux下一些简单常用命令的总结

    Cent os常用命令 查看当前目录信息: l s a:显示所有包括隐藏文件 l :列表显示数据 h:显示数据大小 查看命令帮助: XXX --help[比如:l shel p] 清除控制台信息: c ...

  9. linux下mysql的常用命令

    更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -uroot Welcome to th ...

随机推荐

  1. 关于Jquery的delegate绑定事件无效

    今天在做一个页面,用的是easyui页面有很多的tabs,里面都放了iframe 需要在load事件动态调整iframe高度 发现始终无法使用delegate来绑定load事件. 纠结了一下午发现了问 ...

  2. SpringMVC 表单复选框处理

    <form action="" method="post"> <c:forEach items="${dblist}" v ...

  3. Linux内核中断学习

    1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...

  4. java 常见dos命令

    盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录    注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. cd : 进入指定目录 ...

  5. C语言中的回调函数(Callback Function)

    1 定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数.函数是你实现 ...

  6. java 中如何声明线程安全的集合 set, map 和list

    线程安全的集合 http://blog.sina.com.cn/s/blog_508938e10102v1ig.html //make thread-safe list List MyStrList ...

  7. Android之设置横屏竖屏

    方案一:在AndroidManifest.xml中配置 在项目的AndroidManifest.xml中找到你所指定的activity中加上Android:screenOrientation属性,它有 ...

  8. XtraReport 添加空行的办法,很详细

    这两天为了做报表,研究了一下XtraReport .为了添加空行,想了很多办法.其中如果有分组时,网上给出的办法就会失败.现将经验公布一下,希望各位都能少走弯路. 1.加入自定义函数CreateCel ...

  9. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容

    一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...

  10. jQuery系列之操作select标签

    每次看完东西基本就忘了,现在决定写一下博客来记录,不知道效果咋样. 一.jQuery操作选择器 1.基本选择器 关于基本选择器,我就不用太多说了,包括了ID.类.标签等选择器. 2.层次选择器 我觉得 ...