[SVN]部署使用subversion服务器,版本控制软件。
情况说明:一个工作团队,写出的代码版本不同,工作协调性很差,使用subversion就可以控制版本。subversion允许他人同时协作修改版本,且一旦出现严重BUG可用恢复旧的版本。subversion服务器,也是一个共享服务。
subversion是一个自由开源的版本控制系统。
-在subversion的管理下,文件和目录开源超越时空。
-subversion可以将数据恢复到早起版本,或者是检查数据修改的历史。
-许多人将版本控制系统当做时间机器。
-允许你和别人协作文档,并跟踪所做的修改。
********************部署SVN***********************
yum -y install subversion //安装SVN mkdir /var/svn //创建文件夹 svnadmin create /var/svn/project //使用svnadmin命令创建仓库,数量任意,可自定义仓库名。
模拟导入初始数据:
svn import /usr/lib/systemd/system/ file:///var/svn/project/ -m "Init Data" SVN 导入 被导入数据的路径 导入到的SVN的仓库路径 写注释(重要)
注意:导入的数据将以数据库的形式存在,在本地进入到你的SVN仓库将会看不到你的数据,只能通过客户端访问使用co命令下载使用。
修改配置文件:(注意:所有配置文件每一行开头都不得有空格符)
vim /var/svn/project/conf/svnserve.conf
取消注释,删除前端空格和等号两边的空格,最前面写的行号。
19 anon-access = none //默认read,表示无密码可读取文件;改为none,表示匿名无权限。 20 auth-access = write //保持默认,表示有效账户可读写。 27 password-db = passwd //指定用户名密码文件 34 authz-db = authz //去注释启用ACL访问控制文件
修改密码文件:(注意:所有配置文件每一行开头都不得有空格符)
vim /var/svn/project/conf/passwd
文件末行,仿照注释行写。
[users]
# harry = harryssecret
# sally = sallyssecret
ouyang = 123456
用户名 = 密码
修改ACL控制文件:
vim /var/svn/project/conf/authz
仿照注释:(其他地方未写则默认继承跟的权限)
[/] //此处“/”符号等于仓库的跟
harry = rw //给予harry读写权限(r=读,x=写)
* = //其他人无读写权限
svnserve -d -r /var/svn/project //启动服务(-d,启动进入后台;-r,指定启动仓库)
killall svnserve //杀死、停止程序
也可以不指定路径。但访问SVN会变得更麻烦。例如:svn://服务器IP/路径,而指定路径就可用直接使用IP访问,例如:svn://服务器IP
********************客户端登陆SVN服务器***********************
Windows用户客户端使用软件:TortoiseSVN
以下内容为Centos7用户。
cd 进入一个临时目录。
svn --username ouyang --password 123456 co svn://192.168.2.100 code //使用命令下载到当前的临时目录中
SVN 输入用户名 输入密码 下载 下载来源(SVN服务器) 下载到哪里
执行代码出现如下提示:
----------------------------------------------------------------------- 注意! 你的密码,对于认证域: <svn://192.168.2.100:3690> a6f2c3cc-fbc5-4294-9c98-f707e6ef0a09 只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion 可以保存加密后的密码。请参阅文档以获得详细信息。 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”, 来避免再次出现此警告。 ----------------------------------------------------------------------- |
保存未加密的密码(yes/no)?yes //输入yes保存密码。
cd进入下载目录。注意:必须在目录中执行svn指令,否则将会报错。
略过修改代码~~~
上传更改完成的代码:
svn ci -m "注释内容" //自动识别,不需要输入服务器地址、指定文件,会自动识别。
SVN 上传 写注释
svn update //同步服务器上的资料
svn info svn://192.168.2.100 //查看仓库信息
svn log svn://192.168.2.100 //查看修改用户、修改时间、注释信息。
提交新的文件:(出现文件。SVN将不会主动识别)
vim test.sh //新建文件
svn add test.sh //告诉SVN我要添加一个test.sh文件
svn ci -m "新建test.sh" //上传文件,出现版本号和修改内容,成功。
其他操作同样的:
svn mkdir 文件夹名 //创建文件夹
svn rm 文件名 //删除文件
svn ci -m "新建/删除" //上传
查看文件差异的SVN命令:
svn diff //查看本地与服务器文件差异
svn diff 文件 //仅查看此文件与服务器文件差异
svn cat svn://192.168.2.100/文件名 //cat查看服务器文件内容
删除还原文件:
情况一:文件修改错误,但未提交。
sed -i 'd' 文件名 //模拟清空一个文件内所有字符,修改内容,未提交。
svn revert 文件名 //从SVN服务器调取数据,恢复还原这个文件。
情况二:文件修改错误,但已经提交。
svn ci -m "xxx" //模拟提交错误的文件。
svn merge -r6:5 文件名 //还原一个文件到上一个版本,从第六个版本还原到第五个版本。
SVN 还原 6还原到5 指定需要还原的文件名
情况三:文件被失误删除。
svn update
多用户修改文件:
情况一:多用户修改不同文件。
上传不冲突,无需解决。
情况二:多用户修改相同文件,且修改内容不同行。
出现问题为:第一位上传成功,第二位上传失败。
svn update //上传失败使用此命令解决,SVN服务器自动合并文件,且上传成功。
情况三:多用户修改相同文件,且修改位置相同行。
出现问题:第一位上传成功。第二位上传失败,且svn update命令报错。
出现如下报错信息:
[root@svn code]# svn update 正在升级 '.': 在 “/tmp/code/code/xxx” 中发现冲突。 选择: (p) 推迟,(df) 显示全部差异,(e) 编辑, (mc) 我的版本, (tc) 他人的版本, //mc,上传我的版本;tc,保留他人版本。 (s) 显示全部选项: |
输入 p 回车。
此时获取四个文件。
xxx //你和他的差异
xxx.mine //你的版本
xxx.r10 //旧的早期版本
xxx.r11 //他的版本
综合分析,将多余文件删除,留下一个文件。(xxx)
做法如下。
mv xxx.mine xxx //覆盖文件
mv:是否覆盖"xxx"? y
[root@web3 code]# rm -rf xxx.r* //删除多余
[root@web3 code]# svn ci -m "zzz" //上传同步
正在发送 xxx
传输文件数据.
提交后的版本为 12。 //成功
备份还原SVN服务器:
在SVN服务器上执行以下命令:
svnadmin dump /var/svn/project > project.bak //使用此命令备份仓库
SVN命令 备份 需要备份的仓库路径 导出 生成备份文件路径
svnadmin create /var/svn/project2 //新建仓库,准备还原
svnadmin load /var/svn/project2 < project.bak //使用此命令还原仓库
SVN命令 还原 需要备份的仓库路径 导入 备份文件路径
发表评论