SVN配置 on Mac OX

本文介绍在Mac OX下配置SVM的方法

SVM(Subversion)是一个版本控制器,类似于git. 用法相当于在线文件夹,不同时间段的文件状态都会储存,所谓的跨越时空的文件管理方式

安装

Mac Ox 10.x 以上就会自带svn,先测试一下(terminal端):

1
svn --version

如果出现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
svn, version 1.9.4 (r1740329)
compiled Nov 15 2016, 20:35:27 on x86_64-apple-darwin15.0.0

Copyright (C) 2016 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- using serf 1.3.8 (compiled with 1.3.8)
- handles 'http' scheme
- handles 'https' scheme

The following authentication credential caches are available:

* Plaintext cache in /Users/Bella/.subversion
* GPG-Agent
* Mac OS X Keychain

就是说明已安装。

创建仓库

本地代码仓库

在你想创建本地仓库的地方建文件夹,在命令行中进入文件夹路径:

1
svnadmin create ./

然后在该文件夹路径下会自动生成mycode文件夹,里面有包括config在内的多个文件。自动创建本地仓库成功~

配置

主要需要修改/svn/mycode/conf目录下的三个文件:

  • svnserve.conf
1
2
3
4
5
6
# anon-access = read
# auth-access = write

# password-db = passwd

# authz-db = authz

原来是这样,然后把前面的# 包括空格都删掉,保存。

  • 打开passwd,在[users]下面添加帐号和密码
1
2
3
[users]
username=pwd
bella=love

按照如上格式写,等号前面是用户名,后面是密码。可以用多组用户名密码,对应不同访问者。

  • 打开authz,配置用户组和权限

设置用户组,方便对各个组设置权限

1
2
[groups]
bellagroup=bella1, bella2

设置权限:(对组)

1
2
[\]
@bellagroup=rw

设置权限:(对个人)

1
2
[\]
bella1=r

对人不用“@”,对组需要@。rw分别指 read , write。

启动svn服务器端

1
svnserve -d -r <local-url>

在终端中启动svn服务器。如果没有提示,则说明启动成功。如果此时要使用客户端,则需要另外开启一个终端。

下载远程仓库

该命令将远程仓库clone到本地,具体命令:

1
2
3
svn checkout repository-url --username=arabela --password=love local-save-url

svn checkout repository-url local-save-url

其中,repository-url是远程仓库存储的网址,local-save-url是本地存储的路径,username的等号后面跟着用户名,password等号跟着密码。

两种checkout方法,第一种是标准的方法,需要直接跟着用户名和密码,之后就不需要再输入。但是经过测试,这样的方式,会出现类似的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5:prepare (default-cli) on project mbg-plugin: Unable to commit files

[ERROR] Provider message:

[ERROR] The svn command failed.

[ERROR] Command output:

[ERROR] svn: E215004: Authentication failed and interactive prompting is disabled; see the --force-interactive option

[ERROR] svn: E215004: Commit failed (details follow):

[ERROR] svn: E215004: Unable to connect to a repository at URL 'http://192.168.50.120/svn/misc/trunk/tcxy-mbg-plugin'

[ERROR] svn: E215004: No more credentials or we tried too many times.

[ERROR] Authentication failed
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这是因为Mac有账号管制的问题,这篇博客中有提到这个问题。但是当用它的方法实现时,仍然不能成功。

之后看到一篇博客讲了一种尝试方法(13年的,漏洞已修复),居然成功了~就是方法2,即把username 和password先删去,直接 svn checkout <repository-url> <local-save-url>. 这之后会要求我们输入账号密码,也就是你打开mac桌面时输入的密码,即可交付一次权限,解决了账号管理的问题。之后会提示输入账号和密码,即可进入.

【更新于2017.4.8】

如果出现Access to '...' forbidden

问题出在:

  • 大小写敏感——检查远程路径的大小写和你checkout的路径的大小写是否一致
  • 路径不对

上传至仓库

第一次上传

在本地仓库中放入了文件之后,需要进行上传。在第一次上传时,执行(在svn路径下):

1
svn import ./ <repository-url> -m "first commit"

import后面有两个参数,第一个是本地路径,因为在该文件夹的路径下,所以直接./ 第二个参数是远程路径。如果是本地服务器,则是svn://localhost/mycode(在启动svn服务器端之后另外开一个终端)。 后面的-m是跟着对于这次更新的注释, 用双引号引起来。

之后的上传

1
2
3
svn add file-name
svn commit -m "the second commit"
svn update

【更新于 2017-11-6】 如果在pull之前就不小心又add 了新文件,而新文件正好和其他合作者update的文件冲突,则会报错。

这时候要取消上传,再对冲突文件进行解决:

1
svn resolved conflict-file-name

更新本地仓库

如果是多人维护的仓库,则每次修改之前,要进行update一次,看看别人是否有对该项目修改过,类似于git pull。在本地仓库的文件夹路径下执行:

1
svn update	

其他

1
svn help

帮助文档。如果help之后不加其他的,就会将所有的svn命令都输出;如果help后面跟命令,如svn help commit,则会输出关于commit的相关方法和所带参数。

参考博客:

http://www.cnblogs.com/mjios/archive/2013/03/10/2952258.html