菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
247
0

教程:在Linux、windows7上安装和使用svn(包括修改svn文件提交时间、提交人、提交信息)(修改svn提交日志)(***)

原创
05/13 14:22
阅读数 26051

以下是我整理的svn使用方法,特别是修改svn文件提交时间、提交人、提交信息这块。很少有人去实践,所以我特地整理一下。

参考:SVN和Git对比梳理


1 执行以下命令

 

sudo apt-get update

 

sudo apt-get install subversion

 

svn  #安装是否成功

 

-----------------------------------------------------------

 

2 创建SVN版本库

2.1

 

创建目录/opt/svn :mkdir /opt/svn/

 

创建svn下的repository文件夹:mkdir /opt/svn/repository

 

更改repository的权限: sudo chmod -R 777   /opt/svn/repository/

 

创建版本库: sudo svnadmin create /opt/svn/repository/,

 

完成后会在repository文件夹下生成以下文件:

 

 

然后对db文件夹进行权限设置:sudo chmod -R 777 /opt/svn/repository/db/

 

2.2

 

设置访问权限:需要对conf文件夹下的文件进行修改

 

①修改配置文件conf/svnserve.conf

 

root@ceph2:/opt/svn/repository/conf# nano svnserve.conf

 

#匿名用户可读

 

anon-access = read(可改成none,即不可读)

 

#权限用户可写

 

auth-access = write

 

#密码文件为passwd

 

password-db = passwd

 

#权限文件为authz

 

authz-db = authz

 

(去掉前面的#,并且顶格,不然可能会报错)

 

②添加访问用户conf/passwd

 

root@ceph2:/opt/svn/repository/conf# nano passwd

 

 

③设置用户权限conf/authz

 

root@ceph2:/opt/svn/repository/conf# nano authz

 

 

admin = dyg       //用户dyg属于admin权限组

 

@admin = rw    //admin权限组的权限是读和写

 

* = rw                 //所有的组都具有读权限和写权限

 

-----------------------------------------------------------

 

3 测试SVN服务器

 

①启动服务器  svnserve -d -r /opt/svn/   #(-d:表示在后台运行 ,-r:指定服务器的根目录)

 

查看svnserve是否已经运行:ps aux | grep svnserve

 

(此时服务器已经在后台运行了,可通过“svn://服务器ip/repository”从svn客户端访问服务器了)

 

如果需要关闭服务器,可以用命令:killall svnserve

 

此时svn的服务端安装完成!


3. windows7上安装和使用svn

 1.  Windows7环境下安装SVN服务端

下载地址 https://www.visualsvn.com/server/download/ 按照自己的系统下载对应版本。

 

下载后点击安装,一直选择默认选项到以下界面:

 

安装成功后弹出界面:

 

 

管理界面中,有Repositories,Users,Groups和Jobs四个目录

 

Repositories:仓库路径

 

Users:用户列表

 

Groups:组列表

 

Jobs:任务表

 

新建一个仓库,仓库名为5000,鼠标放在仓库名称上,右键点击 Properties,可以看到该仓库的属性信息,人员信息配置在Security标签页

 

 

此后可新建用户并设置其权限,如创建用户dyg,密码为12345678,权限为可读可写:

 

此时在目录“E:\svn_server\Repositories”即可找到5000仓库。该仓库的服务端地址为:https://dengyungao/svn/5000。

 

可在web页面查看该仓库的详情,选择如下菜单:

 

 

效果:

 

 

 

 


2.  Windows7环境下安装SVN客户端

 

下载地址: http://tortoisesvn.net/downloads.html,根据操作系统下载相应版本(TortoiseSVN)。

 

安装教程:https://jingyan.baidu.com/article/19020a0a27f90c529c284259.html(一直默认即可)

 

安装完成后,鼠标右键出现新菜单:

 

 

此时表示安装成功

 


3.  拉取仓库代码到本地目录

创建本地目录:E:\5000_svn

 

在该目录中鼠标右键,选择svn菜单:

 

       

     

 


4.  本地上传代码到服务端的仓库

本地目录新建文件:

鼠标邮件选择菜单项:

 

在服务端的仓库中查看提交的文件:

 

查看提交记录:

 

 


5.  其他操作

1.  将仓库最新信息更新到本地目录

当团队其他成员更新远程仓库内容时,可将最新内容更新到自己的本地目录中,右键选择菜单项:

 


2.  SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

(参考:https://blog.csdn.net/vbirdbest/article/details/51122637)

 


3. 配置通过ip地址访问svn


 

 

 


4.  代码冲突解决

解决代码冲突可以结合以下几种方式进行:

第一种,文件锁定

SVN默认情况下,所有的文件都没有锁定,只要有提交权限的人都可以在任何时候提交任何的文件。其他人会定时更新他们的工作目录,在库中的改变的东西都会与本地合并。如果你对一个文件获得锁定,那么只有你可以提交这个文件。其他用户的提交都会被拒绝,直到你释放了这个锁。

获取锁:选择你想要获取锁定的文件/文件夹,然后右键菜单点击TortoiseSVN---->Get lock,将会弹出锁定窗口:

一个良好的习惯是每次获取锁定时,在红色标注位置输入获取锁的原因。

释放锁:

有两种情况会释放锁:

1、手动选择你想要释放锁定的文件,然后右键菜单点击TortoiseSVN Release lock;

2、TortoiseSVN为了确保你不会忘记释放锁,在每次”SVN commit“提交时,总是会显示锁定的文件,并总是默认被选中。如果你继续提交,则文件的锁就被自动移除。如果你不希望释放文件的锁,就必须取消选中它。

问题是什么?

如果实际操作过,使用过TortoiseSVN 的 Get lock来加锁,就会发现并不如你所预期的,对文件实现了严格加锁,本篇也就不必要写了。问题在哪?使用TortoiseSVN 的 Get lock锁定文件后,其他用户并不知道你对这个文件已经锁定,即时他们签出最新的版本,依然能够对文件在本地进行修改,文件依然是可读写的状态。

这是一个在其他成员电脑上已经Get lock的文件,可以看到与其他文件在状态上没有任何区别:

 

这样其实是没有意义的,别人依然会对你锁定的文件进行修改,只有当他们在签入时才会发现文件已经被锁定:

这种加锁操作下,团队成员需要定期的检查文件的锁定状态,可以使用TortoiseSVN-----> check for modifications:

 

 

3、更好的办法:使用属性,将文件设置为只读;

之所以存在被锁定后其他成员依然可以在本地修改,是因为SVN所采取的是乐观加锁的策略。如果我们想对某个文件或某个目录采取严格加锁策略,更明确的说是:所有文件默认为只读,在文件修改前需要先获取锁,只有其他人不拥有锁时才可以锁定文件并修改。要实现严格加锁,就需要使用SVN的svn:needs-lock属性。

在想要采取严格加锁的文件或目录上鼠标右键,使用TortoiseSVN----> Properties属性菜单,点击News新建属性,选择Needs-lock:

 

 

 

当设置了svn:needs-lock属性后,实际上对文件就采取严格加锁策略,对文件的任何修改都必须先使用TortoiseSVN 的 Get lock锁定文件,然后才能进行修改。

 

4、关于锁的建议

对于项目中的二进制文件,如图片、声音、动态库等,可以在目录上统一设置svn:needs-lock属性,避免在这些文件上产生冲突,浪费解决冲突的时间。当然,普通文件,也可以设置为只读属性,并且在目录上统一设置svn:needs-lock属性。这样就可以保证同一时刻只有自己能修改文件。修改之前,需要GetLock锁定文件。

 

 

第二种,使用svn自身工具

根据前面陈述可知,针对已有的仓库”file:///E:/5000_svn_formal“已有一个本地目录”E:\5000_svn_code“,现在再创建一个本地目录”E:\5000_svn_code_other“,并将仓库的内容check out到该目录。

然后我们在两个本地目录的子目录trunk中都增加一个文件phone.txt。起初内容相同。

现在先修改E:\5000_svn_code中的phone.txt并提交到仓库,phone.txt的内容为:

11111111222

11123491238

11123908924

11154981951

11161573208

11161799306

11167377764

11169555124

11171083845

11181992716

11191890139

123456

12345678900

12345678901

12345678902

12345678903

12345678908

12345678909

12345678912

12345678922

12345678933

12345679902

45678912315

dd

ff

 

再修改E:\5000_svn_code_other中的phone.txt,两者修改内容不同,phone.txt的内容为:

 

11111111222

11123491238

11123908924

11154981951

11161573208

11161799306

11167377764

11169555124

11171083845

11181992716

11191890139

123456

12345678900

12345678901

12345678902

12345678903

12345678908

12345678909

12345678912

12345678922

12345678933

12345679902

aa

zz

 

此时提交到仓库时就会报错。

在目录E:\5000_svn_code_other\trunk执行”SVN update“同样会报错,

此时选中冲突文件,右键如下操作:

选项解释:

Edit confilicts:修改冲突,可以对冲突的行进行内容选择,后面我们详细说。

Mark as resolved:直接标记为已解决,这样会删除.mine、.r1、.r2这些文件,但这只是标记,如果你直接标记为解决,实际上文件还是冲突的,只是状态修复了。

Resolve conflict using 'theirs':使用其他人提交的内容来覆盖我修改的内容,以此解决冲突。如果你的修改不需要提交,你可以方便的选择这个。

Resolve conflict using 'mine':使用我本地的版本覆盖其他人提交的版本,以此解决冲突。如果其他人提交的代码没什么用,你可以直接使用这个来解决。

 

下面我们详细讲解下Edit confilicts这个选项。点击该选项打开界面:

 

上图的左边A展示的是上个版本的变化,中间B .mine是我们自己本地修改的版本,右边C是其他人员修改的版本。最下面是我们想要的版本。假设我们需要24行保留为我本地(B)的修改,25行使用其他人(C)提交的。则:

最终效果为:

此时可以保存所有内容,也可以直接删除不想要的内容。最后按ctrl+s保存并退出。此时再进入我们本地目录,执行下面操作,默认冲突解决!

最后将本地目录内容更新到仓库,其他人就可以拉取最新的项目了。


5. 修改svn文件提交时间、提交者、提交日志内容

1)svn server的修改

server端仓库地址:

 

进入“hooks”目录,将文件“pre-revprop-change.tmpl”文件名修改为“pre-revprop-change”,

该文件内容修改为:

 

#!/bin/sh

exit 0

 

再修改文件“pre-revprop-change.cmd”的内容为:

 

exit 0

 

最后修改仓库的钩子文件。

修改上述文件的内容为:

2)修改文件提交时间

拉取仓库代码到本地

 

比如修改文件“test.txt”的提交者、提交时间以及提交描述:

查看原提交信息

修改提交信息

最后,本地仓库update一下,并重启svn服务端和客户端(提示:最好直接重启服务端和客户端的电脑),我修改后的效果:

 

发表评论

0/200
247 点赞
0 评论
收藏