SVN快速入门
目录
SVN 是干什么的?
2.SVN的安装
2.1 SVN服务器的安装
2.2 SVN客户端的安装
- SVN的使用
3.1 创建用户(服务器端)
3.2 创建用户组(服务器端)
3.3 创建版本库(服务器端)
3.4 为仓库设置用户访问权限(服务器端)
3.5 项目导入到服务器
3.6 检出文件(客户端)
3.7 添加文件(客户端)
3.7 添加文件夹(客户端)
3.9 删除文件(客户端)
3.10 更新至最新文件(客户端)
3.11 版本比较(客户端)
3.12 查看版本日志(客户端)
3.13 锁定文件
3.14 未提交时撤销文件的修改
3.15 得到一个去除了指定版本修改后的文件
3.16 解决版本冲突
1)如果不涉及同一行或相邻行。
2)如果涉及同一行或相邻行。
解决冲突方式之一——手动解决冲突
解决冲突方式之二——取消修改
解决冲突方式之三——使用自己的,放弃版本库
3.17 撤销修改
3.18 切换svn账号
4.svn使用经验:
1. SVN 是干什么的?
同学们是不是在小组协作完成项目的过程中,常常因为文件版本混乱而苦恼,由于多人修改而导致某些修改内容的丢失?找不到最新版本?
看到下面的图片,同学们有没有似曾相识的感觉,为了保留更改记录,我们会保存若干个版本的副本,通过这种方式把修改的历史版本保存下来。这样万一某个版本有问题,我们还可以找到之前的版本。
但是这种copy方式有一些明显的缺陷:
1.很难知道各个版本之间做了那些修改呢?必须打开文档进行比对查看。
2.如果遇到多人同时编辑修改文档,则往往容易出现文件混乱,部分信息丢失的问题,尤其是大家的期末设计,多个同学完成代码,就常常遇到这样的困惑。
那么有没有比copy方式更好的解决方法呢?
当然有更好的解决方法!!!工于利其事必先利其器,下面我们就来介绍较为流行的版本管理工具SVN,它可以帮助你记录文件的历史版本,并让多人协同工作,完成文件的编辑。.
SVN是一个开放源代码的版本控制系统,。它是集中式版本管理,用户将文件提交到服务器。当然用户也可以根据需要下载后修改指定版本的文件,然后再提交到服务器。
由于它是集中管理,所以存在单点故障的问题。
SVN只关心每个版本更新了那些文件,以及更新了哪些内容
2.SVN的安装
Svn分为服务器端和客户端。
服务器端:保存文件版本仓库。通常一个公司在服务器安装一个服务器端,保存文件历时版本,
客户端:每位开发安装一个客户端。开发人员通过客户端连接到服务器后,下载指定版本的文件。修改后,可以更新到服务器形成性的版本
从超星班级资料中下载服务器安装包进行安装
同学们可以到超星班级资料下载服务器端和客户端安装程序。如果是演练,则只需要安装客户端。
不能访问超星的同学可以从百度网盘下载。
链接:https://pan.baidu.com/s/1unHFP27MlTu\_wCmZkdrzvg
提取码:1234
2.1 SVN服务器的安装
- 双击安装包
- 点击 【Next】
3.同意许可协议后,点击 【Next】
4.采用默认安装选项,点击 【Next】
5.根据需要设置安装路径和版本库位置后,点击【Next】
6.选择授权方式后,点击【next】
7.点击【install】
8.点击【Finish】开始安装svn
此时,我们会进入svn服务器控制界面
以后可通过安装路径下的VisualSVM server.msc启动SVN服务器控制面板
9.安装之后可以到安装路径下查看下程序文件夹和版本仓库文件夹
10.使用命令可以查看已经安装svn server的版本号
2.2 SVN客户端的安装
1.双击安装包
2.在用户许可协议上点击 【Next】
3.设置安装路径后,点击【Next】
4.点击【Install】开始安装
- 点击【finish】,完成安装
- 安装完成后,可以到安装目录中去看一下
也可以到桌面上点击右键菜单验证,是否出现如下所示的右键菜单以验证客户端是否安装成功。
3. SVN的使用
3.1 创建用户(服务器端)
请同学们尝试:服务器端创建3个用户 user1/123456 user2/123456 user3/123456
输入账号信息后,点击【ok】
三个用户添加后的效果如下所示:
" class="reference-link">
3.2 创建用户组(服务器端)
在服务器端点击创建用户组
请同学们尝试:创建1个图书管理系统开发组,组名为:book_dev ,并在组中添加 user1,user2
效果如下:
3.3 创建版本库(服务器端)
服务器端创建仓库
选择仓库的类型
设置访问权限
如下图所示。已经成功创建了仓库“图书管理系统”
3.4 为仓库设置用户访问权限(服务器端)
3.5 项目导入到服务器
目前svn服务器上的仓库”图书管理系统“目前是空的。
开发人员想将本地的项目上传到svn服务器,我们来看看他怎么完成。
开发人员进入要上传的文件夹的根目录下,点击右键菜单 Tortoise -> import
在’URL of repository”中输入配置管理员给你的项目地址, 填写日志后,点击【ok】,即可完成提交
如果是第一次进行svn操作,需要输入用户信息,以便配置管理工具了解,是谁在操作。
此时,SVN服务器上刷新仓库,就可以看到刚才提交的文件了。
3.6 检出文件(客户端)
新额开发人员加入团队,那么他需要先下载最新的项目文件,然后进行功能的开发或者bug的修改。
我们看看他怎样能把最新的项目文件下载到本地。
- 开发在本地创建一个文件夹(文件名合法即可),用来存放下载文件。
2.在文件夹中点击右键菜单 SVN chekout
在 “URL of repostorise”中输入要下载的仓库地址
在 “checkout directory” 中输入你要保存文件的路劲。默认就是当前路径
你还可以根据需要选择版本号,现在仓库只有一个版本,我们就下载最新版本即可
效果如下,svn的工作区有一个隐藏的文件“.svn”,它用来监控文件的变更。有了它,后期才可以修改、删除、更新等操作。
如果没有该隐藏文件夹,那么它只是一个普通的文件夹。
如果看不到隐藏文件的,请进行设置。
开发人员后续就可以在工作区添加、更新、删除文件,并提交到服务器。
3.7 添加文件(客户端)
刚才我们已经把项目下载到本地,现在我们尝试添加一个。
大家进入到刚才检出的工作区下额“13 svn添加文件练习” 目录中,新建文件“005.txt”,并保存。
现在我们把它提交到svn仓库。
- 先 svn add
本操作并不会将文件添加到仓库,下次提交时,才能正在提交到仓库
- svn commit
在文件夹的空白区域点击右键菜单 SVN commit,弹出窗口上点击【ok】即可。
输入修改日志,点击【ok】即可完成提交
日志信息方便日后查找某个版本
3.7 添加文件夹(客户端)
假设某个开发希望新建一个文件夹,该文件夹及其下的文件如何提交到仓库呢》
方法与文件添加基本相同
1.在想要的工作区路径下新建文件夹,并添加相关文件
2. 在文件夹上上点击右键菜单 TortoiseSVN -> add
那么现在只是告诉svn,这些文件和文件夹想要纳入版本管理。并没有提交到服务器。
- 点击右键菜单 SVN commit ,
输入日志后,点击【ok】
成功提交文件夹到服务器后,文件夹会有绿色对勾标识,而在服务器上刷新也可以看到该文件夹。
3.8 修改文件(客户端)
开发想要修改一个文件。需要先从svn checkout 最新版本,然后再本地修改后,commit到服务器。
如下图所示,开发乙已经检出了代码,将caculate.java文件做了如下修改
下面来看开发乙如何将修改提交到服务器的
可以选中修改的文件commit,当然选中文件所在的祖先目录也是可以commit的。
若不选中任何文件夹,则表明对文件夹中的所有修改进行提交。
若点击版本比较,则可以查看本版本与父版本之间的差异
3.9 删除文件(客户端)
某个文件已经提交到svn服务器,但是现在不需要改文件了,要从服务器上删除。那该怎么操作呢?
下面我们来练习删除2个文件。
下面我们进入文件夹 “16 svn删除文件练习” ,选中要删除的文件003.txt和004.txt,点击右键菜单TortoiseSVN —>delete按钮,之后进行commit,就可以将文件从服务器上上删除了
此时虽然本地003.txt和004.txt已经删除了,但是这个修改并没有提交到服务器
3.10 更新至最新文件(客户端)
开发团队的每天有很多添加、修改、删除操作。大家每日早上应当将最新的版本文件更新到本地,下午下班前将修改提交到版本库。
那么早上我们是如何更新我们的本地工作区呢?
在工作区 的空白文件夹 点击右键菜单 “SVN update”
3.11 版本比较(客户端)
版本比较可以帮我们快速了解不同版本的差别。svn的版本比较很方便。
例如,上午你提交的版本功能还是正常的,但是下午你提交的版本登录功能就不正常了,那么这应该是你下午修改代码引起的,这时,我们通过代码比较,快速找到修改的代码,从而定位和解决问题。
选中要比较的文件,点击右键菜单 TortoiseSVN -> Diff with previous versioon .
当然你可以与之前的任何版本比较,在显示日志(show log),可以完成指定版本的比较。
下面我们来看看 显示日志功能。
3.12 查看版本日志(客户端)
在你想要查看日志的文件夹或者文件上,点击右键菜单 TortoiseSVN->show log,可以查看到具体的日志信息
为了减少同学们之间的相互干扰,更好的练习,建议大家每人创建一个以自己姓名命名的文件夹,所有的操作在自己的文件夹操作,
3.13 锁定文件
防止其他人修改文件,可以锁定文件
其他人试图提交枷锁文件会报错。
加锁人自己可正常提交
加锁的人可以释放锁
3.14 未提交时撤销文件的修改
" class="reference-link">
文件内容回复到修改前的状态
3.15 得到一个去除了指定版本修改后的文件
文件经过 版本1,,2,3,4,5,6,7等修改后 如果想去除 3,4版本的修改工作,该如何撤销修改呢?
这时候就可以使用 revert changes from this version 。
例如,大家可以修改 13 svn添加文件练习 下的 003.txt
第一次将第一行修改为 11 提交
第二次将第二行改为 22 提交
第三次将第三行改为33提交
然后撤销第二次的修改。 就可以使用该功能。
3.16 解决版本冲突
例如。假设版本库中的 main.cpp文件如下:
#include <stdio.h>
int main(int argc, char *argv[]) {
int n=10;
int i;
for(i=0;i<n;i++)
printf("%d\n",i);
return 0;
}
如下图所示,假设最开始版本库中的文件版本是 V1 , 张三、李四都下载了该版本的文件到本地。
张三、李四修改后,分别依次进行提交,根据两者修改的内容是否涉及同一行,结果不同。
1)如果不涉及同一行或相邻行。
那么,李四提交时,会在张三修改的基础上合并李四的修改。
张三修改后,提交到版本库。版本升级为V2 ;
李四修改后,也去提交文件,如果修改的地方不一样,
此时,提交,系统会提示需要先更新。update时,会将张三的修改合并到李四的文件中,
然后再提交,则版本可以正常升级到V3.
为了演示方便,大家可以从svn服务器检出两个工作副本,模拟2个用户。
此时的,main.cpp已经包含了张三和李四的修改,
此时再次commit即可将合并的内容提交到版本库
2)如果涉及同一行或相邻行。
那么,张三、李四分别检出代码后,张三修改后可以正常提交
但李四提交时,将会冲突,通常需要手工解决冲突后才能提交。
假设张三把n=10 改为了 n=20 修改后,提交到版本库。版本升级为V2 ;
李四把int n = 10 改为了 long n=10
return 0 改为 return 1;
张三可以正常提交,产生新版本
但是李四提交时,会报冲突
关闭后,进行svn更新
解决冲突方式之二——取消修改
删除冲突文件
假设 张三、李四下载最新文件后,张三改为“return 3;” ,李四改为“return 4;”
张三提交后
李四提交时,出现冲突
对每一处冲突选择是用版本库的,还是我的修改,或者两者都使用,也可以手动修改,将所有冲突确定好解决方案后,点击“Mark as resolved”
此时版本库上的文件,已经是我的文件了。
3.17 撤销修改
删除本地文件,直接update下载最新文件到本地即可、
3.18 切换svn账号
有时我们需要切换到其他账号进行svn操作
选择要删除的用户后,点击 【ok】按钮
此后,进行svn操作时会让你输入新的账号。例如,svn update时,弹出登录窗口
4.svn使用经验:
早上开工前先更新代码,保证自己在最新代码上工作 update代码
下班提交代码。保存劳动成果
有问题的代码不提交。
版本冲突,谁发现,谁解决
执行commit之前,先update
问题解决办法:
操作中如果遇到svn的图标(绿色对勾,加号,红色的叉叉等不能正常显示),请参考https://blog.csdn.net/weixin_44541320/article/details/119418867
http://xn--svn-928dw0oiqjj00am4aq3itvpb3z6ghgs2d
S**VN 图标若不显示,解决**办法见链接
https://blog.csdn.net/weixin\_44541320/article/details/119418867
- SVN的详细使用可以参考
SVN 安装 | 菜鸟教程https://www.runoob.com/svn/svn-install.html 菜鸟变成上的svn使用帮助
还没有评论,来说两句吧...