SVN作为源代码文件版本管理的工具,在日常项目中,经常使用到。没有使用过SVN的用户,经常不知道如何操作。这篇文章主要介绍了客户端TortoiseSVN基本操作(图文教程),需要的朋友们下面随着我来一起学习吧。
一、导入本地项目到SVN
svn中默认是没有任何项目代码的,需要由项目经理人为上传。
1、查看SVN中代码库
2、找到你本地代码保存的位置
3、往SVN中导入指定项目
4、填写SVN地址及备注
5、查看SVN中代码库
可以看到少了一层文件夹,我们的本意是把getDataInfo这个目录,整体上传到SVN中的当前操作目录中,可以上传到当前操作目录后,当前操作目录中保存的是getDataInfo内部的所有文件。
6、重新往SVN中导入指定项目
7、查看SVN中代码库
手工删除,之前上传乱的文件
二、项目成员下载项目
1、TortoiseSVN图标介绍
(1)、一个新检出的工作复本使用绿色的对勾重载,表示Subversion状态正常。
(2)、在你开始编辑一个文件之后,状态就变成了已修改,而图标重载已变成了红色感叹号。通过这种方式,你可以很容易地看出那些文件从你上次更新工作复本被修改过,且需要提交。
(3)、果在提交的过程中出现了冲突,图标就会变成了黄色感叹号。
(4)、加号告诉你有一个文件或者目录已经被计划加入到版本控制中。
(5)、蓝色问号表示此文件没有受控,不在SVN管理范围
2、lipengfei用户操作
2.1、创建本地工作文件夹
2.2、把SVN项目下载到本地工作文件夹
3、wangqiang用户操作
3.1、创建本地工作文件夹
3.2、把SVN项目下载到本地工作文件夹
因为我在同一台电脑,模拟2个操作用户,所以要先清空一下data
三、模拟日常本地的开发
1、lipengfei用户增加新文件
1.1、在lipengfei本地工作文件夹中操作
新建1个txt,起名为:hello.txt,并输入:lipengfei1
1.2、查看SVN上项目目录
发现SVN上的项目目录,并没有lipengfei用户新建的hello.txt
1.3、把lipengfei新建的txt做Add操作
1.4、把lipengfei新建的txt做SVN Commit
从提示出看到Version的值+1了
1.5、查看SVN上项目目录
1.6、通过浏览器查看SVN项目目录
http://192.168.8.100/svn/当前操作目录
1.7、查看版本信息
1.8、第2种增加文件
新建1个txt,起名为:lipengfei_new.txt,并输入:lipengfei
在当前工作目录空白的地方,右键鼠标弹出菜单,然后选择SVN Commit… ,在弹出的窗口,选择该文件,确认。
查看SVN服务端
2、wangqiang用户同步操作
2.1、查看本地工作目录
可以看到wangqiang本地目录中,并没有lipengfei用户新建的txt
2.2、使本地与SVN代码库同步
2.3、查看本地工作目录
3、wangqiang用户更新文件操作
3.1、编辑hello.txt
3.2、查看修改后的hello.txt
3.3、提交修改后的文件
因为这个hello.txt已经在SVN上存在了,所以不用Add,直接就SVN Commit
4、lipengfei用户同步操作
4.1、查看本地工作目录中的hello.txt
lipengfei用户下的hello.txt中内容,并不是最新的,还是之前旧的。
4.2、通过浏览器查看SVN代码库
可以看到SVN代码库中,hello.txt中保存的是最新的内容
4.3、把SVN服务器中内容更新到本地目录
4.4、查看本地工作目录中的hello.txt
5、lipengfei用户删除文件操作
5.1、未入版本库
如果被删除的文件,还未入版本库,它不受SVN管理。则可以直接使用操作系统的删除,操作删除该文件。
5.2、已入版本库
如果被删除的文件,已入版本库,它受到SVN的管理。则删除的方法如下,有2种实现方式,详细操作如下。
5.2.1、使用SVN删除
选择被删除文件,右键svn菜单执行"delete"操作
然后选择被删除文件的父目录,右键svn菜单执行"SVN Commit"
查看SVN代码库
SVN代码库中一样,也把对应的txt删除了
5.2.1、使用操作系统命令删除
使用操作系统的删除操作删除该文件
然后选择被删除文件的父目录,右键svn菜单执行"SVN Commit",在变更列表中选择被删除的文件
查看SVN代码库
SVN代码库中一样,也把对应的txt删除了
6、lipengfei用户给文件改名操作
选中需要重命名的文件或文件夹,然后右键"TortoiseSVN Rename",在弹出的对话框中输入新名称,点击"ok"按钮
然后选择被改名文件的父目录,右键svn菜单执行"SVN Commit",在变更列表中选择被改名的文件
查看SVN代码库
SVN代码库中一样,也把对应的sql文件改名了
7、lipengfei用户对文件进行还原操作
7.1、新建一个txt文件
给新建的txt文件,起名为lipengfei.txt,并提交到SVN代码库中。
7.2、修改lipengfei.txt
修改lipengfei.txt,增加一些操作内容
提交修改的lipengfei.txt到SVN代码库
7.3、修改lipengfei.txt
修改lipengfei.txt,增加一些操作内容
提交修改的lipengfei.txt到SVN代码库
7.4、还原lipengfei.txt
现在version的值是17,还原lipengfei.txt到version值为15的情况。
右击想要回退的文件或者文件夹,在TortoiseSVN弹出菜单中选择"Update to reversion…" 操作
我们要回退到第15个版本只需要在Revision中填写相应的版本号,然后点击ok即可。
查看lipengfei.txt的内容
lipengfei.txt中什么内容也没有,因为version值为15时,lipengfei.txt刚创建出来。
8、lipengfei用户检查更新
此功能可以显示你所做的修改有哪些还没有提交的,此功能不光能看到对文件的修改变化,所有的变化都能看到,包括增加文件或者目录,删除文件或者目录,移动文件或者目录等,如果你点击了检查版本库,那你还可以看到版本库里的改动,既别人提交了哪些文件的改动,你还没更新到本地。
8.1、本地目录中创建一个bmp
8.2、修改lipengfei.txt
8.3、查看更新
在本地工作目录中,空白的地方右键操作
9、lipengfei用户查看日志
在本地工作目录,空白地方点击右键
通过此功能可以查到谁,什么时候,对那个目录下的那些文件进行了那些操作。
10、文件加锁详解
10.1、版本控制系统的加锁策略
日常开发工作中,多人协同开发是最常见的了。避免多个人同一时间对同一个文件改动的相互覆盖,版本控制系统就必须有一套冲突处理机制。有两种处理办法:乐观加锁和严格加锁。
严格加锁:所有签出的文件都是只读的,任何对文件的修改必须要获得文件的锁,如果其他人没有拥有该文件的锁,那么版本控制系统就会授权给你文件的锁,并将文件设置为可编辑的。
乐观加锁:所有签出的文件都是可读写的,对文件的修改不必获得文件的锁,当你修改完文件签入时,会首先要求你更新本地文件,版本控制系统不会覆盖你的本地修改,而是会让你自己合并冲突后签入。
相比于严格加锁,乐观加锁可能会有较高的产生冲突的概率,但允许团队成员任何时间对文件进行编辑,拥有极大的协作效率。对于像不可合并的二进制文件或想在某些文件和目录上采取严格加锁策略,SVN也提供了严格加锁的办法,就是对文件的加锁解锁操作。
10.2、获取锁和释放锁
SVN默认情况下,所有的文件都没有锁定,只要有提交权限的人,可以在任何时候提交任何的文件。其他人会定时更新他们的工作目录,在库中的改变的东西都会与本地合并。如果你对一个文件获得锁定,那么只有你可以提交这个文件。其他用户的提交都会被拒绝,直到你释放了这个锁。
10.2.1、给文件加锁
选择你想要获取锁定的文件,然后右键菜单点击TortoiseSVN选择Get lock操作,将会弹出锁定窗口:
10.2.2、释放文件锁
有2种情况会释放锁:
(1)、选择要释放锁定的文件,右键菜单点击TortoiseSVN,然后选择Release lock。
(2)、在commit操作的对话框中,会显示锁定的文件,默认被选中。如果继续提交,选中的文件中的锁就被移除了。如果不希望释放文件的锁,不要选中它。
10.2.3、文件锁不住
使用Get lock锁定文件后,别人并不知道这个文件已经锁定了,即时他们SVN Checkout最新的版本,依然能够对文件在本地进行修改,文件依然是可读写的状态。
前面我们把lipengfei_workspace中的hello.txt锁定了,可以看到与其它文件在状态上没有任何区别,如下图所示:
这样的加锁操作,其实是没有意义的。因为你的同事在自己本地,依然会对你锁定的文件进行修改,只有当他们在签入时才会发现文件已经被锁定。
我们来模拟一下,这种场景:wangqiang用户在自己的本地目录中,修改hello.txt,并提交。
10.2.4、检查文件的锁定状态
这种加锁操作下,团队成员需要定期的检查文件的锁定状态,可以使用TortoiseSVN的check for modifications:
10.3、将文件设置为只读
SVN默认采取的是乐观加锁的策略,如果想对某个文件或某个目录,采取严格加锁策略,更明确的说是:所有文件默认为只读,在文件修改前需要先获取锁,只有其他人不拥有锁时,才可以锁定文件并修改。
在采取严格加锁的文件或目录上,点击右键。
10.4、获取锁
当设置了needs-lock属性时,实际上对文件就采取严格加锁策略,对文件的任何修改,都必须先使用TortoiseSVN的Get lock操作,下面实战操作一下。
lipengfei用户在本地,修改上面设置只读的hello.txt文件,发现无法操作。
再次修改hello.txt,发现可以修改了。
提交你的修改到SVN
为了确保你不会忘记释放锁,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。如果你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。如果你希望保持一个修改过的文件的锁,你需要在提交之前选中保持锁定复选框。
10.5、总结
对于项目中的二进制文件:图片、声音、动态库等,可以在目录上统一设置needs-lock属性,避免在这些文件上产生冲突,浪费解决冲突的时间。
在10.4获取锁这块操作时,如果你选择了Steal the locks偷取锁。你正在写一个不可合并的文件类型,并且你窃取了某人的锁,一旦你释放了锁,他们就可以随意检入他们的修改以覆盖你的。Subversion并不会丢弃数据,但你却失去了锁带来的对团队工作的保护。
11、版本库浏览
在本地工作目录,空白地方点击右键
有时候我们需要在版本库中直接进行操作,而不是在工作拷贝中。这就是我们的版本库浏览器可以做到的。正如资源管理器和能浏览你的工作拷贝一样,版本库浏览器允许你浏览版本库的结构和状态。在版本库浏览器中,你还可以执行比如拷贝,转移,重命名等等,直接操作在版本库上。
12、自动过滤
在用svn管理版本时,有时希望在提交到服务器时,能过滤掉指定后缀名的所有文件,或指定名称的文件夹、文件名。
12.1、检验默认的过滤
在lipengfei本地的工作目录中,创建debug文件夹、lipengfei.test文件。
在空白地方右键菜单,点击SVN Commit操作
默认情况下过滤控制比较宽松,上面新建的debug文件夹和lipengfei.test文件,自动就显示出来,让我们可以勾选并Commit操作。
12.2、查看并设置全局忽略样式
(1)查看全局忽略样式
在本地目录空白的地方,右键菜单点击TortoiseSVN,选择Setiings操作,将会弹出窗口:
(2)增加自定义全局忽略样式
添加时注意,最开头的字符与已有配置之间的空格区分。我增加后的效果如下图:
12.3、检验自定义的过滤
在空白地方右键菜单,点击SVN Commit操作。
可以看到,debug文件夹和lipengfei.test文件,它们身上没有绿色对号的标识,因为它们是新创建的,还没有Commit到SVN上管理。
我们在本地项目目录中,做SVN Commit操作时,提示没有任何文件修改或添加,不需要TortoiseSVN做SVN Commit。
至此,客户端TortoiseSVN的基本操作,就操作演示完毕了,心灵手巧的你,就可以上手操作SVN了。但是这些也仅仅是基础操作,后面我还会分享讲解,TortoiseSVN的日常操作:版本冲突、版本回滚、主干分支等等,欢迎继续关注我!!!