模拟一下实际的情况来使用svn(Linux为服务器,Mac为客户端)
这里我利用虚拟机的ubuntu16.04来充当svn服务器,统一管理代码。
查看ubuntu的ip为10.211.55.6
查看unbuntu是否安装了svn:svn --version
如果没有安装,使用 命令安装即可
sudo apt install subversion
至此,我们两台计算机都有svn了(mac默认就有svn)
1. 创建仓库
在找一个你喜欢的位置,创建一个文件夹(以后我们所有的代码仓库都往这边保存),我这里是在桌面创建了code文件夹
然后进入文件夹,使用命令创建代码仓库
svnadmin create <仓库名>
我这里仓库名取名为learnsvn, 可以使用同样命令创建出不同的仓库,
2. 配置启动服务
进入仓库里的conf文件夹cd learnsvn/conf
1步:vi svnserve.onf 将以下四行注释打开, 注意:他们不在一起,我们要找一找逐个打开
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
注解:anon-access = read代表匿名访问的时候是只读的,若改为anon-access = none代表禁止匿名访问,需要帐号密码才能访问
2步:vi password 打开password进行用户及密码的配置
3步: vi authz 配置用户组和权限
4步: 启动服务端
使用命令
svnserve -d -r <仓库路径>
我的是创建在桌面上,所以进入code使用命令svnserve -d -r learnsvn
使用ps aux | grep svn查看当前运行的进程,以我这个为例如果想关闭服务,可以直接杀死进程 sudo kill -9 21353
至此,我们的服务器搭建完成!!
3. 用mac连接ubuntu svn代码仓库
情况一:从本地导入代码到服务器(第一次初始化导入),这里,为模拟情况,我现在桌面创建了mycode文件夹当做项目, 在里面创建了readme.txt文件,并写上‘learn svn is easy...’
使用命令将本地代码导入远程svn仓库
svn import <本地项目代码路径> svn://<远程ip>/<远程仓库路径> --username=<用户名> --password=<密码> -m "<说明>"
我现在mac在桌面的mycode文件夹里面,所以使用本地文件路径使用了相对路径,也可以使用绝对路径,远程路径就是前面我们创建的并配置的代码仓库。
svn import ../mycode svn://'10.211.55.6'/home/zizle/Desktop/code/learnsvn --username=zizle --password=123456 -m "初始化导入"
情况二:从远程拉取代码到本地
使用命令
svn checkout svn:///<仓库路径> --username=<用户名> --password=<密码> <本地路径>
这里,我首先在桌面创建了hahaha文件夹,然后将代码从ubuntu拉到hahaha里面
查看内容
至此,我们已经可以创建拉取服务器上的仓库了。。
情况三:修改代码后,提交上服务器
我们进入刚刚拉取下来的hahaha文件夹内,修改readme.txt文件,增加“yes, i think so..”
推送上服务器,进入代码所在文件夹,使用命令
svn commit -m '<本次提交说明>‘
可以看到如下结果
情况四:更新服务器端的代码到客户端
假设你休息了两天,周一来上班,而你的小伙伴已经加班加点在readme.txt添加了一句话’now let's to go learning......‘,并且提交了代码,你周一上班了就需要同步本地的代码
在代码所在文件夹使用命令就可以更新本地代码了
svn update
我在桌面新建一个文件夹'heihei'来模拟这个小伙伴,进入拉取代码到文件夹,进入修改readme.txt
然后重新进入我们自己的代码文件夹'haha',查看,还是上周休假前的状态,于是你开始更新,使用命令
svn update
说明:提交和更新都可以指定文件的,只要在命令后添加文件名即可。但我觉得没用。你觉得呢?
最后我们查看更新后的readme.txt,就发现跟服务器同步了。
结果如下:
说明:其中,我进行了2次提交,所在所有过程中版本号多了1,图片做了小修改。
重点:SVN在服务器端的存储方式和客户端是不一样的,所以在服务器端是看不到源文件的。服务器端有两种存储方式FSFS和BDB,目前默认都是FSFS,将每次commit的内容增量方式存放的,每个增量包存成1个文件,这个增量包中包括了这次commit的全部数据。所以,别像我一样去服务端查找文件在哪,根本看不见!哈哈。。
现在,我们已经初步掌握了svn代码管理工具了!!!