svn 在linux 下的一些常用命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!
以上是关于svn 在linux 下的一些常用命令的主要内容,如果未能解决你的问题,请参考以下文章