svn常见操作

来源:互联网 发布:php跳转到另一个控制器 编辑:程序博客网 时间:2024/05/17 07:00

  • svn服务器搭建
    • 1 建立svnsvnadmin create
    • 2 配置svn conf
    • 3 启动svnserve服务svnserve -d -r
  • svn help版本username
    • 1 svn help command
    • 2 -r 600
    • 3 -r 600611
    • 4 -r 600HEAD
    • 5 svn username qilei password 123456
  • svn clean
  • svn co svn1921682100XXX
    • 1 checkout版本162
    • 2 只checkout XXX这一层内部目录不checkout
    • 3 只checkout文件夹XXXsimulation
    • 4 只checkout文件比如netlist快捷符svn只能checkout某个文件夹
    • 5 checkout到本地并改名为qilei目录
  • svn commit -m xxxxxxxx
  • svn cp
  • svn delete
  • svn diff
    • 1 svn diff aaaav -r 611
    • 2 svn diff可以支持gvimdiff的
  • svn info
  • svn list我一般使用svn ls查看当前目录下的svn文件类似linux的ls命令
  • svn log
    • 1 svn log -v
    • 2 svn log -v -r 611600
  • svn mv
  • svn revert
  • svn st的某些状态不理解意思
  • svn up时遇到冲突怎么办
  • 常见问题
    • 1 本地代码更新较多存在bug暂时不能上传但是要求继续使用代码版本维护
    • 2 有些人不规范利用mv指令修改名称导致错误
    • 3代码提交不整洁
    • 4项目不同阶段会设置不同用户权限
    • 5在我的工程里有一个文件每个人都必须改变它但是我不希望他们本地的修改被提交如何让svn commit忽略这个文件
    • 6sim_gpu的仿真环境已经执行过里面有很多临时文件怎么拷贝一个新的干净的最新svn版本的sim_gpu
    • 7svn服务器推荐的目录布局特指单一项目的svn维护
    • 8svn的文件内容尽量精简
    • 9 svn怎么忽略特定文件或者文件夹

svn大多数人都会,有些命令是可以深入的。


1. svn服务器搭建,

可以参考/home1/qilei/SVN/create_svn_cangku.sh脚本。基本说来是三步。

1.1 建立svn。svnadmin create

1.2 配置svn。 conf

1.3 启动svnserve服务。svnserve -d -r ./


2. svn help/版本/username

2.1 svn help command

有需求,基本思路,从内容里查找自己有用的信息。

2.2 -r 600

指定版本号600

2.3 -r 600:611

指定版本号600到611的范围。

2.4 -r 600:HEAD

指定版本号从600开始到最新版本

2.5 svn –username qilei –password 123456

默认用户名密码是缓存到本地的。大都遇到这样的情况,liaojian有一个与我负责IP相关的bug,经debug后,认定要提交svn ci,如果不添加参数–username qilei,就使用的liaojian本地缓存的用户名提交代码,造成svn log的混乱。如果添加参数–username qilei –password 123456,就会污染liaojian本地用户名密码的缓存


3. svn clean

主要是解决svn lock问题。


4. svn co svn://192.168.2.100/XXX

4.1 checkout版本162

svn co svn://192.168.2.100/XXX -r 162

4.2 只checkout XXX这一层,内部目录不checkout。

svn co svn://192.168.2.100/XXX -N

4.3 只checkout文件夹XXX/simulation

svn co svn://192.168.2.100/XXX/simulation

4.4 只checkout文件,比如netlist快捷符。(svn只能checkout某个文件夹)

svn co svn://192.168.2.100/XXX -N

4.5 checkout到本地并改名为qilei目录

svn co svn://192.168.2.100/XXX -N qilei


5. svn commit -m “xxxxxxxx”

如果换行,可以
svn commit -m “xxxxxxxx \
yyyyyy \
zzzz”

6. svn cp

一般用于svn 分支使用。这个cp是极好的,因为它是廉价复制,对空间消耗极小;本地看起来是真正的拷贝,服务器上基本没有任何空间增加。
svn的delete和copy都不是普通的删除和复制
svn的delete只是做了个标记,在客户端获取新版本时不出现这些被删除的文件,而文件本身在服务器端仍然是存在的,而且可以通过更新到原来的某个版本找回这些文件
svn的copy也只是在服务器端做个类似指针的映射,在服务器端并不重复存储这些文件,对服务器端的存储空间消耗极小
svn的分支和标签用的都是svn copy

7. svn delete

删除目录或者文件,
然后svn ci提交。


8. svn diff

8.1 svn diff aaaa.v -r 611

与611版本的aaaa.v做diff比较。

8.2 svn diff可以支持gvimdiff的。

但是会影响整个主目录下的svn diff;有时候脚本命令会用到svn diff。建议,还是保留svn diff。

9. svn info

显示svn的信息,包含版本号、URL、last changed author等。
与svn switch URL经常配套使用。确认当前svn的branch。
经常用svn info命令,解决很多不常见的svn操作错误。这个命令,值得拥有。


10. svn list(我一般使用svn ls)查看当前目录下的svn文件。类似linux的ls命令。


11. svn log

11.1 svn log -v

打印日志,包含代码改动的文件名列表。

11.2 svn log -v -r 611::600

611版本与600版本之间的版本改动记录。

12. svn mv

重命名
svn mv XXX/design/IP XXX/design/IP_OLD
配合svn ci XXX/design/IP -m “update IP”,就可以提交新IP代码了。


13. svn revert

举例,如果svn add aaaa.v之后,发现aaaa.v没有必要提交。
可以使用svn revert aaaa.v,取消掉svn add aaaa.v命令。
类似的svn delete aaaa.v,也可以。
svn revert目录,要加入–depth参数,比如
svn revert XXX –depth infinity


14. svn st的某些状态不理解意思。

svn help st已有详细描述。


15. svn up时遇到冲突,怎么办?

$ svn update
U INSTALL
G README
Conflict discovered in ‘bar.c’.
Select: (p) postpone, (df) diff-full, (e) edit,
(h) help for more options:

个人认为,直接ctrl+c,然后对bar.c进行svn st检查冲突原因。不需要明白select的各命令意义。

16. 常见问题

16.1. 本地代码更新较多,存在bug,暂时不能上传。但是要求继续使用代码版本维护。

在svn中标签和分支都源于copy命令。
3个约定俗成的目录:
trunk:主干
branches:分支
tags:标签

推荐svn层次分为2个大目录
svn_name/trunk:主干。公用的稳定版本

svn checkout svn://192.168.2.100/svn_name/trunk

svn_name/branches:分支目录

发布分支:

svn cp svn://192.168.2.100/svn_name/trunk/project_name svn://192.168.2.100/svn_name/branches/project_name -m "创建用于本地的分支"

切换分支:
主干版本:

svn switch svn://192.168.2.100/svn_name/trunk/project_name

分支版本:

svn switch svn://192.168.2.100/svn_name/branches/project_name

注意:稳定版和开发版,不要搞错了。以后再开发版进行操作。

本地代码经过验证成功后,通过merge操作,提交至最新的svn服务器。
合并分支需要两个步骤:
合并操作
首先,切换到需要merge后提交的版本,比如主干版本或者分支版本,一般是分支版本的代码merge到主干版本。

svn switch svn://192.168.2.100/svn_name/trunk/project_namesvn merge -r 33:HEAD svn://192.168.2.100/svn_name/branches/project_name解决merge问题后,最后提交svn ci

16.2. 有些人不规范,利用mv指令修改名称,导致错误。

例如
svn add yyy
svn提示:yyy已经在版本控制里。
原因解析:版本控制里,其实并没有yyy,但是svn info yyy,会发现yyy本身的svn URL是另外一个名字(例如xxx),而且这个xxx名字文件确实是在版本控制里。
还有一种可能的原因,是yyy目录里有.svn。
总之,svn info yyy,只有说明yyy不是一个版本资源,就可以执行后续svn add yyy 了。
解决办法:svn info yyy;svn delete xxx;然后svn add yyy

16.3.代码提交不整洁

不相关的文件,甚至临时文件都做了上传。

16.4.项目不同阶段,会设置不同用户权限

16.5.在我的工程里有一个文件,每个人都必须改变它,但是我不希望他们本地的修改被提交,如何让’svn commit’忽略这个文件?

答案是:不要将文件纳入版本控制,而是将文件的模板纳入版本控制,例如“file.tmpl”。
然后,在初始化的‘svn checkout’之后,让你的用户(或你的构建系统)执行通过普通的操作系统复制将文件修改为正确的文件名,文件未版本化,所以绝不会提交。并且如果你希望,你可以将文件加入到父目录的svn:ignore属性中,这样它就不会在‘svn status’命令中显示‘?’。

16.6.sim_gpu的仿真环境,已经执行过,里面有很多临时文件,怎么拷贝一个新的干净的最新svn版本的sim_gpu

暂时想到的办法是,svn co svn://192.168.2.100/xxx/sim_gpu sim_gpu2

16.7.svn服务器推荐的目录布局(特指单一项目的svn维护)

结合svn branch和tag去理解。

/XXX_project   trunk/      design/      simualtion   tags/      formal_v1.0/   branches/      branch_v0.01/          design/          simualtion            branch_v0.02/      branch_v0.03/

16.8.svn的文件内容尽量精简

svn的目录布局,增加一些common目录

16.9. svn怎么忽略特定文件或者文件夹

svn propset svn:ignore "worklib" .

svn操作会忽略当前目录下的worklib文件或者文件夹。
注意后面的点符号,表示当前路径;这是svn propset语法要求的。

查看当前忽略的文件或者文件夹?
解答:svn propget svn:ignore

参考文档:
SVN中Branch的创建与合并 - 黄博文 - 博客园
http://www.cnblogs.com/huang0925/p/3254243.html

0 0