最近一直在使用svn管理项目,以前不怎么用,随着现在越来越顺手,现在就以mac上面的smartSVN这个软件总结下,svn哪个软件都是一样的,只要可以使用svn就行,虽然软件可能不一样,但是操作都是一样的。
下载到本地
资源是存在svn的服务器的,所以开工之前首先要从服务器下载到本地,这个时候就是用check out命令了,选择project》check out就可以了,然后按照提示填入svn的服务器,选择下一步,然后选择一个本地文件夹,或者新创建一个文件夹,然后点击done,svn软件就开始自动的下载资源到本地了。
管理本地资源
本地资源就是下载后的资源的那个文件夹,在选择check out之后,其实会在你选择的那个文件夹里面创建了一个.svn的隐藏文件夹,进入那个文件夹,在终端使用ls -a即可查看,你同步在本地的svn的工程的配置神马的都在这个里面,所以这个你不要删除就行了。 如果想看本地和服务端有了什么不同的,可以打开svn软件,project》open workingcopy,然后选择你check out之后的那个文件夹就可以了。之后你就会看到svn上面会有红色的标志哪个改变了,或者增加了。
同步上传到服务器
在本地修改好之后,跟着上一步,用svn软件打开本地的同步的那个文件夹,然后会标识你的哪个文件改变了,如果需要同步,选中那个文件,右键update一下,然后右键commit提交即可,然后就会提交到svn了。
为什么提交之前要update?
因为你每次update之后,那个文件的版本就会升一个版本,svn看你文件是不是老文件还是新文件就是根据你这个版本号判断的,在svn中,不允许用老的版本覆盖新的版本,update是为了标志现在你提交的这个是最新的版本,这样如果别人在你之后提交的是以前的老的文件的话就会提示提交失败,如果你没有update,那么版本号还是停留在老的版本,这样别人提交的文件可能会覆盖你的文件,所以好的习惯就是提交之前update
没听懂的话我举一个例子
a和b两个人同时下载了file.cpp这个文件,这个文件的版本是1.0,现在假设a修改了file.cpp这个文件,b没有修改。如果a在提交之前update了一下,那么现在a本地的file.cpp这个版本就变成了2.0,提交之后,svn服务器上面的file.cpp这个文件的版本也变成了2.0,这样b提交的话,就会提示现在本地的file.cpp这个文件太老,需要先升级之后才能提交,这样就知道服务端已经修改了,b在点击update的时候,服务端就会先把b本地的那个1.0的那个文件更新成服务端的2.0的那个状态,如果b再修改了file.cpp,然后再update一下,就变成了3.0,以此类推
而如果a在提交之前没有update,直接选择了提交,那服务端的file.cpp虽然内容修改了,但是版本号还是以前的那个1.0版本,这样在b提交的时候,会直接覆盖了a提交的那个
所以好的习惯就是提交的时候先update再提交,在修改此文件之前先update再开始修改,修改完毕之后update一下,再提交
update和revert的区别
在出现冲突的时候,可以选择update和revert两种方法使本地文件和服务端文件一致,这两个的区别是这样的。
* update
update是更新,就是修改本地文件使本地文件和服务端相同,服务端哪修改了,update会自动修改本地文件修改相应的地方。并且把本地文件升级为服务端的版本。update的好处就是保存了你在本地文件的修改,但是不足地方就是有可能在两个人同时编辑同一个文件的时候出现冲突,这个时候如果软件解决不了就需要人来手动的查看冲突地方。
* revert
revert则更像是先删除本地的那个文件,然后把svn的那个文件重新下载一下,revert就舍弃了你在本地的修改。这个缺点就是不会保留你在本地的修改,优点就是:没有冲突
添加和删除文件
在原来的svn里面没有这个文件的时候,如果要添加文件可以直接把该文件拖到你的check out之后的那个文件夹里面,然后打开svn,svn会检测你的不同的地方,然后你选择你的这个新文件,commit提交就行了,这样就添加了文件。 删除文件和添加文件类似,把那个文件从你的文件夹里面删除,然后打开svn,选择比较框的那个你想要删除的文件,右键remove,然后update一下,commit提交就行了。
还有其他技巧,但是现在已经是00:30了,明天上班,以后再继续总结吧
2015/08/20续
增加tag和branch
SVN打tag是一个很常用的功能,要谈打tag,还得从SVN官方推荐的目录结构说起。SVN官方推荐在一个版本库的根目录下先建立trunk、branches、tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容;branches存放各分支的内容,比如为不同客户制定的不同版本;tags存放某个版本状态的标签,比如验收测试版、1.0.3版等。branches和tags本质没有区别,都是通过svn copy方式建立的,差异在于通常branches中的内容是需要继续修改或开发的,tags中的内容是存放不再修改的,这一般通过权限设置来解决,tags通常只给管理员开发写权限。我们的项目开发到一个稳定版本都需要打个tag,进行总结与备份。
一、打开项目文件,project >> open working copy
二、tag和branch目录设置,选择Tag+Branch >> Configure Layout
三、设置
其中,Project Root就是你现在这个工程的svn的root地址,Trunk地址是你的这个工程在check out的时候的那个相对root的地址。Branches就是以后你打Branches的时候的目录,Tags是以后打Tags的时候的目录,这两个目录都在上面设置的Project Root目录下,这两个目录要先建好。
四、打Tag和Branches
选择Add Tag 和Add Branch就行了,然后填写名字,提交即可。
使用本地项目直接打tag
上面说的打tag原理其实就是把trunk上面的文件先copy到tag上面,然后打一个版本号保存,理论上tag是不能修改的,只是用来以后读取直接用的,但是有的时候由于操作不规范,比如说拉了一个tag,但是因为某些原因修改这个tag,而trunk上面的也修改了,也不能直接拉trunk上面的东西,这时候需要打tag,当然,肯定不能直接更新提交到原来的tag,因为原来的tag是备份的,如果上传了就失去了备份的意义,所以这时候就要使用本地的这个tag版本直接打tag了。
方法就是选择tag+brunch的第二个选项Tag Multiple Project Roots
然后填上想要打的tag的版本号,提交就可以了,打的tag位于这里设置的tag的目录,这个原理就是先把这个项目拉的那个原来的tag文件先拉到新的tag里面,然后再提交修改的项目到这个tag目录下,从而实现了本地修改版本打tag的目的。
添加和删除文件夹
前面说的是添加和删除文件,现在说在svn目录里添加和删除文件夹。
添加文件夹
在check out的目录里,点击右键,选择Create Directory,即可添加文件夹
删除文件夹
删除文件夹不能直接右键删除,需要先下载下来,但是肯定不用下载整个svn的东西,只需要下载文件夹名即可,所以可以这样。
重新下载一份,check out他的上级目录,但是Checkout Depth的时候,选择Immediate children(files and directories),然后check out,这样的话check out的就只是他这个目录下的第一级目录和文件,其他的是不下载的。
check out之后,打开本地文件,就像删除文件那样,右键点击这个目录,remove,update,commit即可删除。
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/206.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
9 条评论
我Tag+Branch这个菜单栏一直都是灰色点不了的,所以你说的那个也点不了
我试了下,你需要先选中项目,然后再去点击这个菜单,比如这两张图
如果还不行,可以看下你svn账户是否有权限
我是按照你图二设置的,不行。问了后台是给了我修改的权限的
你svn版本多少?要不试试高版本吧,我用的这个9.0版本的SmartSVN for mac破解
加个qq 894506380@qq.com吧,这里评论截图比较麻烦 ,我的smartsvn版本是9.1.3
我已经选中了项目,一直都选不了
先点击Configure Layout设置配置一下,然后再用
我的Tag+Branch菜单是灰色的,用不了不知道是什么原因?
先点击项目,选中项目之后那个菜单才可以用