Subversion 不是单单为程序编写员而设的……我知道,因为我就不是。最近我开始用它来做后多事情,例如:备份 Nagios 的设置、文件、及任何以文字为基础的东西。我不知道因何我没有更早使用它,但无论如何,事情就是这样了。这份文件简捷地解释安装及设置 subversion,及如何在本地和在联网上通过 Apache 使用它。请参阅它所提供的文档关於完整、复杂的设置及安装。其实坊间有很多关於这个题材的优秀文档,所教授的远超过我对这个工具的认识。假如你像我一样喜欢尝试新的事物,这份文档可以帮助你快速入门。

Contents

  1. 系统
  2. 参考
  3. 安装
  4. 设置
  5. 运用 subversion
  6. 访问控制清单
  7. 后记
  8. 进深阅读

1. 系统

CentOS 4.x/RHEL 4
CentOS 5.1/RHEL 5

2. 参考

Subversion:http://subversion.tigris.org/
Version Control with Subversion:http://svnbook.red-bean.com/

3. 安装

[root@lucifer ~]# yum install mod_dav_svn subversion

你首先要做的事情就是安装我在上面所提及的两个组件。如果你未安装 Apache,这样做亦会为你把它拉进来。

当你用 yum 安装时,它会列出上面两个组件以外的组件。其它东西亦会自动被安装。视乎你已有的组件,你的经历也许会不同。

4. 设置

4.1. Apache

在你进一步学习之先,你需要确定 Apache 已经被设置好。我假设你在做一个全新的安装,因此如果你的 Apache 已经在运作中……请小心你所做的改动。我亦会解释如何设置基本的口令保护。然而,假若你想容许任何人访问版本库,你可轻易地省略这部份。

你首先要做的事情就是打开/etc/httpd/conf/httpd.conf,而且最低限度更改ServerName这个指引。如果你需要协助或拥有更复杂的设置,请参详 Apache 的文件。

[root@lucifer ~] vim /etc/httpd/conf/httpd.conf —— 作所需修改并存档
[root@lucifer ~] service httpd start
[root@lucifer ~] chkconfig httpd on

在网络上浏览你的机器,http://yourmachine,看看你能否取得测试页。做得到吗?好了,让我们进到更有趣的事情。

4.2. Subversion 给 Apache 的设置

下一步就是在 Apache 内设置某些设置,好让 Subversion 与 Apache 能够融洽相处。现在让我们看看 Subversion 为你安装的样例配置文件。

[root@lucifer ~] cd /etc/httpd/conf.d/
[root@lucifer ~] vim subversion.conf

# 有需要的话,请确定你删除这两行的注释
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

# 加入下列内容来支持基本验证,并将 Apache 指向实际放置版本库的地方。
<Location /repos>
        DAV svn
        SVNPath /var/www/svn/repos
        AuthType Basic
        AuthName "Subversion repos"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
</Location>

上面的位置是 Apache 在 URL 列上使用的。举个例说:http://yourmachine/repos指向你所指定的 SVNPath。上面只是一个样例,因此请按你的首选放置东西。请确定你在完成编辑后存储文件。

然后我们须要创建你在上一部所指定的口令档。开始时你要利用 -cm 这个选项。它会创建文件并用 MD5 将口令加密。如果你需要加用户,请确定你只使用 -m 选项,而不包含初次创建时的 -c。

[root@lucifer ~] htpasswd -cm /etc/svn-auth-conf yourusername
New password:
Re-type new password:
Adding password for user yourusername
[root@lucifer ~] htpasswd -m /etc/svn-auth-conf anotherusername
New password:
Re-type new password:
Adding password for user anotherusername

4.3. 设置你的版本库

你接著要做的事情就是创建你用来提交及取出文件的版本库。利用 svn 所包含的工具,这是很容易的。

[root@lucifer ~] cd /var/www/ —— 或者你在上面所指定的路径
[root@lucifer ~] mkdir svn
[root@lucifer ~] cd svn
[root@lucifer ~] svnadmin create repos
[root@lucifer ~] chown -R apache.apache repos
[root@lucifer ~] service httpd restart

现在去测试你能否通过网页浏览器访问你的版本库:http://yourmahcine/repos。你应该取得一个对话框询问用户名称及口令。若然是这样,请输入你的凭证,然后你应该看见一版Revision 0:/的页面。这样的话,版本库的设置便大工告成了。如果你须要多个版本库,请参考上面连结内的文档。这里只示范如何设置一个版本库及开始应用它。话说回来,让我们就这样做。

5. 运用 subversion

5.1. 分配你的版本库

如果一切顺列,你现在应该已准备好使用你所创建的版本库。subversion 的 svn 工具是你将要用来与数据库沟通的命令行客户端。若要看这个工具的用法:

[root@lucifer ~] svn --help

你最有机会使用的选项是:svn import、svn commit(ci)、svn checkout(co)。开始时你会用 import 将文件输入你的版本库;你会用 checkout 取出它们作修改;你会用 commit 将改动提交到数据库内。一旦你见过它们被应用数次,这便颇为简单。

在我继续之先,我希望解释关於目录结构的分配。几乎所有文件都谈及用某个分配方法创建你的目录。他们会提及要确定你在根目录下设有 branches、tags 及 trunk 目录,当中 trunk 会包含你的所有文件。就例如:

.
|-- project1
|   |-- branches
|   |-- tags
|   `-- trunk
`-- project2
    |-- branches
    |-- tags
    `-- trunk

参考书会较详细解释这样做的原因,但我基本上不会采用这种分配……这是因为我不算是写程序或维护「项目」。我主要用它来存储相对简单的配置文件及文件。请用适合你的方式来设置。

作为一个样例,我会创建一些示范用的目录及放置一些文件在其中。这是在 SVN 服务器上做的。请照样做。

[root@lucifer ~] cd /tmp
[root@lucifer ~] mkdir mytestproj
[root@lucifer ~] cd mytestproj
[root@lucifer ~] mkdir configurations options main
[root@lucifer ~] vim configurations/testconf1.cfg —— 放你喜欢的东西在这些文件内。
[root@lucifer ~] vim options/testopts1.cfg
[root@lucifer ~] vim main/mainfile1.cfg

请记得你可以随你的自己的意思进行分配。当你完成了你所须的首个分配后,让我们向前进并将它输入 subversion 内。

5.2. 输入

[root@lucifer ~] svn import /tmp/mytestproj/ file:///var/www/svn/repos/mytestproj -m "Initial repository layout for mytestproj"
Adding         /tmp/mytestproj/main
Adding         /tmp/mytestproj/main/mainfile1.cfg
Adding         /tmp/mytestproj/configurations
Adding         /tmp/mytestproj/configurations/testconf1.cfg
Adding         /tmp/mytestproj/options
Adding         /tmp/mytestproj/options/testopts1.cfg

5.3. 取出

现在利用网页浏览器取出文件:http://yourmachine/repos。你应该能够取出你所输入的东西。一旦你在本地的 SVN 服务器上载了你最初的分配,你只需用先前所创建的户口连接到 subversion 服务器,便可以在另一台远程的机器上使用它。让我们测试一下。

[me@mylappy ~] cd /tmp
[me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj
Authentication realm: <http://yoursvnserver:80> Subversion repos
Password for 'youruser':
A    mytestproj/main
A    mytestproj/main/mainfile1.cfg
A    mytestproj/configurations
A    mytestproj/configurations/testconf1.cfg
A    mytestproj/options
A    mytestproj/options/testopts1.cfg
Checked out revision 1.

5.4. 编辑及提交

正如你所见,你已经从 subversion 服务器取出了第 1 版。现在你可以编辑一些东西,然后将改动提交给 subversion 服务器。

[me@mylappy ~] cd mytestproj
[me@mylappy ~] vim configurations/testconf1.cfg —— 加入或删除某些东西并存档。
[me@mylappy ~] svn commit -m "Added a line to testconf1.cfg."
Sending        configurations/testconf1.cfg
Transmitting file data .
Committed revision 2.

这样做的一个好处,就是你可以删除刚才在你的机器上所取出的所有目录。你取出它们的唯一目的,就是要编辑它们,然后将它们送返主机。请浏览你的服务器来取出不同文件。

5.5. 新增/删除对象

这一切都很好,但你如何在现存的版本库内加入更多文件?很简单,就是利用 add 这个引数。请你现在就取出你最新的版本,复制一个文件到目录内,加入这个文件,然后提交你的改动。

[me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj
A    mytestproj/main
A    mytestproj/main/mainfile1.cfg
A    mytestproj/configurations
A    mytestproj/configurations/testconf1.cfg
A    mytestproj/options
A    mytestproj/options/testopts1.cfg
Checked out revision 2.

[me@mylappy ~] cd mytestproj
[me@mylappy ~] cp /etc/yum.repos.d/CentOS-Base.repo configurations/
[me@mylappy ~] svn add configurations/CentOS-Base.repo
A         configurations/CentOS-Base.repo

[me@mylappy ~] svn commit -m "Added the CentOS Yum repo file."
Adding         configurations/CentOS-Base.repo
Transmitting file data .
Committed revision 3.

要删除对象,你只须以 delete 代替 add。提交你的改动,然后便成了。就是这么简单。再次返回你的浏览器,你会发现版本号码是 3。你应该可以点击文件并找出你所做的改动。

5.6. 撤消

这些都非常好,但我如何撤消到旧的版本……这不是 subversion 的用意吗?对,这很容易。好果你不清楚你现有的版本……看看 log 这个指令。这解释了你为何每次提交时要放入信息。它们要简洁,但含足够数据来提醒你或许忘掉了的事情。

[me@mylappy ~] svn log http://yoursvnserver/repos —— 这针对整个版本库
[me@mylappy ~] svn log http://yoursvnserver/repos/mytestproj —— 这针对个别项目

你会取得一个完整的版本列表连同注解,正如我上面所讲。这样你便能选择你现在想取回哪个版本。

[me@mylappy ~] svn co -r 1 http://yoursvnserver/repos/mytestproj

这个指令会取回第 1 个版本。

6. 访问控制清单

一般来说,你不会想将所有版本库的访问权给予所有用户。你可以利用 ACL 来限制每位用户访问版本库的权限。ACL 可以通过AuthzSVNAccessFile这个文件选项来启用,它以一个文件名作为参数。例如:

AuthzSVNAccessFile /etc/svn-acl-conf
你可以在相关的Location部份加入它:

<Location /repos>
        DAV svn
        SVNParentPath /var/www/svn/repos
        AuthzSVNAccessFile /etc/svn-acl-conf
        AuthType Basic
        AuthName "Subversion repos"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
</Location>
然后你可以创建/etc/svn-acl-config。这个文件内藏有这个格式的分段:

[版本库名称:版本库路径]
用户 = 访问权
当中访问权可以是r(只读)、rw(读写)、或空白(禁止访问)。缺省的 ACL 是禁止用户访问版本载。假设你有一个名叫framework的版本库,而你想给john只读的权限,及joe读写的权限。你可以加入下面这个分段:

[framework:/]
john =  r
joe = rw
你亦可以在名叫groups的分段内置立群组,然后在访问控制清单内将@符号放在群组前面。例如:

[groups]
staff = joe,george

[framework:/]
john =  r
@staff = rw
如果你想令所有用户能阅读每个版本库,你可以为每个版本库的根目录加入以下一个分段:

[/]
* = r

7. 后记

这只是 subversion 能赋予你的能力的很小部份。这份入门指南能助你一把,初步示范如何使用它,并理解它的运作。你可以用 subversion 的工具做各样事情,所以请记得查阅文档来学习关於可以协助你的不同选项。另外请留意为你的需要安装 Apache 也许是小题大做。要完全使用 subversion 的工具,你可以在本地的机器上指定file:///path/to/repo,而不必像我的 Apache 样例般使用http://yoursvnserver/repos/whatever。据闻很多人都在他们的主机上用它来管理大型项目及配置文件,免得自己发疯。祝你好运。

CentOS 上的 Subversion的更多相关文章

  1. ios – 在XCode提交期间,exclaimation point符号对文件意味着什么?

    当从XCode中提交对SVN存储库的更改时,某些文件具有“!”右栏中的符号.这个符号是什么意思,我应该用这些文件做什么?

  2. 在Xcode中安装的git中禁用osxkeychain凭证帮助程序

    解决方法如果您的问题主要关注的是安全性,并且您希望每次都输入密码,那么我会接受钥匙串以适应您的目标>进入osx钥匙串应用程序,>如果您使用的是https,请查找服务器名称>通过单击更改其设置,并在选项卡“访问控制”标记“询问钥匙串密码”下>如果需要,请从列入白名单的应用程序列表中删除git-credential-osxkeychain应用程序.请注意,在Linux上,默认行为也是自动发送凭据.

  3. 如何在xCode 9.0中设置SVN存储库

    使用xCode9.0,我遇到了SVN设置问题.我找不到任何添加SVN存储库的选项适用于早期版本的xCode.在源代码管理中,我到处都是GIT.我正在使用SVN很长一段时间,并正在使用早期版本的xCode但是这不适用于xCode9.0.解决方法如果你有旧版本的xcode,并且上面的升级方法不能正常工作或无法使用,那么终端可以用来升级.>前往终点站>使用cd命令将目录更改为项目文件夹库>要验证您是否在

  4. ios – SVN忽略’.a’文件

    我正在尝试在我的XCode项目中添加一个’.a’文件但它被SVN忽略了,因此我无法将其添加到存储库中.任何线索可能是什么原因?解决方法是的,你必须手动完成.只需在控制台中导航到它并执行svnaddfile_name.a即可.

  5. ios – Xcode:错误 – &gt;构建失败 – &gt;请升级您的Subversion客户端以使用此工作副本

    我正在使用Xcode4.2.1.我有这个问题在iOS模拟器上运行现有的应用程序:我安装了Subversion服务器1.7.1,并且在客户端我升级到1.7.1.我做了一个svn升级然后我在Xcode中得到了这个错误.如果我在终端上重复svn升级,我收到消息无法升级’…’,因为它不是1.7之前的工作副本目录.那有什么不对?

  6. Xcode 4和版本控制 – 但是哪一个?

    >使用Xcode集成版本控制,组织者,克隆,从xcode等提交.我的意思是完全或几乎被Xcode控制?>忽略Xcode让他认为没有版本控制,并在命令行自己做?>上述两个合并?Github是非常受欢迎和强大的,但你必须学习git,并学习很难.>Mercurial?看起来比较友善>还有什么?对有经验的人有一些反馈意见是无价的,所以我和许多其他人希望在面对VCS墙时可以选择自己的路径:-)非常感谢!!!.我建议一些git开头阅读:>Gitinfiveminutes>GitCommunityBook>TheThi

  7. IOs Cordova长按显示文本选择放大镜即使禁用文本选择,如何删除?

    是否有任何可能导致此问题的插件?任何帮助深表感谢.Cordova插件:>com.mbppower.camerapreview>cordova-plugin-statusbar>cordova-plugin-whitelist>离子插件键盘>org.apache.cordova.camera>org.apache.cordova.console>org.apache.cordova.device>org.apache.cordova.dialogs>org.apache.cordova.file>org.a

  8. Xcode和SVN:无法重命名我的类 – &gt;错误:155007(路径不是工作副本目录)

    我读了this.我也发现了类似的problem.但到目前为止还没有解决方案.解决方法我遇到了同样的问题,谷歌指导我这个问题,所以为迟到的’回答’道歉.无论如何,我正在研究eclipse3.5,macosx雪豹,你似乎也在使用macosx?关键是,macosx’hfs-filesystem大多数情况下设置不区分大小写,所以因为你只是想改变文件名的大小写,这可能是你的问题.我的解决方法是从FOO.h到Foo.h执行重命名:>FOO.h–>foobar.h中>FooBar.h–>foo.h中

  9. openstack学习笔记七 swift安装

    指定映射位置创建ring文件启动服务代维服务proxyserver

  10. openstack安装liberty--安装对象存储服务swift

    通常使用CACHE技術提高性能Accountservers賬戶服務,管理對象存儲中的賬戶定義。Containerservers容器服務,在對象存儲中管理容器或文件夾映……Objectservers對象服務,在存儲節點管理實際的對象,比如文件。Wsgimiddleware處理認證,通常使用OPENSTACKIdentityswiftclient為用戶提供命令行接口使用RESTAPIswift-init初始化和構建RING文件腳本swift-recon一個命令行工具,用於檢索群集的各種度量和測試信息。

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部