日志标签 Subversion

Subversion管理后台增加对SVN容灾的支持
8月29日
群英汇Subversion版本控制系统提供的基本服务,实际上已经包含了简单的容灾实现:
- 在本机使用 gistore 进行数据备份
- 在备机上用 git pull 进行每日一次的数据同步
这个方法对于大多数公司,对于非核心数据的容灾备份已经足够,但是对于代码,不同的公司有着不同的敏感度,可能每日一次的备份就不合适了。
最近在给一个客户进行SVN版本控制系统的实施时,就碰到了SVN服务器间建立镜像和实时备份的需要
- 两个异地的开发团队,每个团队工作在不同的本地版本库,可能会参考(读取)异地不同版本库的内容
- 异地团队中间通过无线网桥互联,互联网桥的通讯质量易受到环境、气候的影响
- 如果两个异地的SVN服务器能够互做镜像,可以实现双机热备
- 一个团队可以在本地的主版本库中读写,一旦有数据写入本地版本库,就会同步到无线网桥另外一端的版本库。反之亦然。
- 由于本地还提供无线网桥另外一端版本库的镜像,因此访问远程版本库可以改用本地镜像进行访问,实现本地读取速度。
如果需要写入,配置 SVN反向代理,实现透明的远程写入。
Subversion可以使用 svnsync 这一工具实现版本库的远程镜像,但是如果使用手工配置,对于客户数量众多的版本库,难以维护。加之很多版本库本身很大,从头建立同步可能会非常缓慢。
我们通过在SVN管理后台增加了一对儿插件,实现了对SVN容灾(镜像)的图形化配置界面。
阅读全部内容 »

爱上Git——《Git培训讲义》摘录
8月17日
群英汇的开源版本控制系统服务和咨询主要是基于Subversion,群英汇的开源项目管理系统平台主要集成的也是Subversion。但是我们公司(群英汇)内部的开发一直在使用Git,所以实际上,我们在Git上也有着丰富的使用和管理经验。
最近一个客户选择了我们提供Git的培训和部署服务,于是从上周开始着手准备《Git培训讲义》。
这个客户是有着实际的需求,才不得不从 Subversion 迁移到 Git,虽然只是公司的部分项目组。
《Git培训讲义》中开头有一章,我给它命名为“爱上Git”,抓眼球是其次,主要是先让用户能够立刻“爱上Git”。
阅读全部内容 »
pySvnManager 0.5 升级指引
8月9日
对于不能提供 SSH 远程登录服务器的用户,可以参照本文进行 pySvnManager 的升级。关于 pySvnManager 的新功能,参照:《pySvnManager新功能:LDAP用户同步》
升级的步骤简单的说就是:备份 -> 软件升级 -> 重启服务
阅读全部内容 »

pySvnManager 新功能:LDAP用户同步
8月8日
pySvnManager 升级到 0.5 版本,引入了数据库支持,数据库主要用于保存和 LDAP 用户帐号同步的用户帐号信息。
数据库采用 sqlite 数据库(如果需要也可以使用其它类型数据库),无须手动创建数据库,在 pySvnManager 运行时,会根据需要自动创建数据库。
在没有使用 LDAP 用户信息之前,pySvnManager 是读取 SVN 授权文件,从该授权文件中获取用户名单并显示。
可以看出这种实现的问题是:
- 在权限检查的用户列表中,只能看到用户登录ID,而看不到用户 ID 对应的用户名
- 显示的用户帐号很少(只有在 SVN 授权文件中引用的用户帐号才能显示)
- 为新用户授权,如果用户不在授权文件中,需要手工输入用户名,容易出错。
pySvnManager 0.5 增加了内置数据库和LDAP用户同步功能之后,再看 pySvnManager 中显示的用户列表:
你会发现新版本的用户列表(已经完成和LDAP同步):
- 除了显示用户ID外,还显示用户名
- 显示的用户多了很多,除了在 SVN 授权文件中引用到的用户外,LDAP 中授权的 SVN 用户也显示出来了
- 在为新用户授权时,不必手工输入用户,只需要进行一次 LDAP 用户同步,用户帐号信息自动显示出来。
那么如何进行LADP 同步呢?
我们把 LDAP 用户同步的按钮放在“角色管理”界面,只要点击其中的“和LDAP用户同步”图标按钮,自动完成同步。
其它改进还包括:更好的 IE6 支持,UI 的重新设计等等。我们会陆续协助客户完成软件升级。
用户手册也已经更新,参见: 《pySvnManager 用户手册》
关于如何升级到新版本的 pySvnManager,参照《pySvnManager 0.5 升级指引》

pySvnManager 升级
6月11日
pySvnManager 升级为 0.4.1,并撰写了用户手册和开发者手册。相关的更新:
- 重新设计的用户界面,更加人性化。不知道我当初为什么手那么懒,呵呵。

- 能够发现 svn 授权文件手动更改,并在警告信息中提供保存的链接

- 能够运行在最新的 Pylons 1.0 框架中,并且支持 virtualenv,可以彻底解决 python 包依赖问题
- pySvnManager 用户手册,提供详细的安装以及操作指南
- pySvnManager 开发者文档,提供 pySvnManager 软件架构的详细解说,供爱好者改进时参考
Python setuptools hack: get revision from git-svn
6月2日
Python egg 打包有赖于 setuptools。setuptools 有一个功能很有意思,就是准备打包的软件如果使用了 subversion 版本控制系统,会自动将当前SVN的提交版本号附加在生成的软件包文件名中。
例如:pySvnManager-0.4.1dev-r131.tar.gz 中的 r131 含义就是从 svn 的 131 提交版本创建的源码包。
但是如果使用 git-svn来检出 svn 版本库,再运行打包命令 “python setup.py sdist”,就失去了这个帅呆了的功能。怎么办呢?
Hack 一下 setuptools 呗,之前就干过。
阅读全部内容 »
Subversion 用户眼中的 Git (13): Git 成为 SVN 的伙伴?
5月30日
很多公司不能代码开源,甚至也不能实现内部的代码开源,这相当大的原因是政治原因,而非技术原因。
那么当工作在 Subversion 的版本库下,是不是就和 Git 绝缘了呢?
非也,答案就是 Git-svn。
Subversion 用户眼中的 Git (12): Git 有属性么?
5月30日
除了在前面比较过的部分检出,路径授权等,还有一些 Subversion 的特性,在 Git 中的实现存在差异。用户最关心的可能就是:属性。
是的,Git 也有属性的概念,但是和 SVN 的属性并非一一对应的。
阅读全部内容 »

TortoiseSVN自动获取redmine问题列表插件—TortoiseSVNRedmineIssuesPlugin
5月20日
众所周知,TortoiseSVN是一款灵活而且功能强大的SVN客户端视图工具。更锦上添花的是,它还提供了整合问题跟踪系统的接口(通过与问题跟踪系统的集成,在提交代码时,可以点击相应的按钮,弹出缺陷跟踪系统中的bug列表,选择相应的bug作为提交日志,即减少了写提交日志的苦恼,又使提交与bug建立的关联,一举两得)。记得以前用Trac做缺陷跟踪管理工具时曾用过trac与TortoiseSVN整合的插件,如今我们的缺陷跟踪工具已经迁移到Remdine上了,不知Redmine是否也有相应的插件?
今天一个很好的客户反映redmine也有相关的插件,可是配置起来出了点问题,希望我们研究一下。于是今天我就在虚拟机里摸索这个插件了。
下面介绍一下安装配置步骤:
阅读全部内容 »
Subversion 用户眼中的 Git (11): Git 授权没有 SVN 那样精细
5月17日
的确,Git 的授权做不到 Subversion 那样按照路径进行授权。
Subversion 可以通过授权文件,将权限设置到每一个路径。但是也有缺憾,即权限不能在分支中继承。例如为 /trunk 及其子目录的授权,不能继承到分支或者里程碑中相应的目录下。群英汇通过泛路径授权能够简化分支授权的配置,但毕竟也还是需要进行配置。
Git 的授权模型只能实现非零即壹式的授权,要么拥有全部的写权限,要么没有写权限,要么拥有整个版本库的读权限,要么禁用。
从技术上将,Git 可能永远也做不到类似 SVN 的路径授权(读授权):
- 如果允许按照路径授权,则各个克隆的关系将不再是平等的关系,有的内容多,有的内容少,分布式的理念被破坏
- 如果只有部分路径可读,则克隆出来的提交和原始提交的提交ID 可能不同。因为提交ID是和提交内容有关的,克隆中提交的部分内容被丢弃,势必提交的 ID 也要重新计算
- 允许全部代码可读,只允许部分代码可写,在版本控制的管理下,是没有多大实际意义的,而且导致了提交的逻辑上的不完整。
那么有什么办法来解决授权的问题么?
- 公司内部代码开放。即代码在公司内部,对项目组成员一视同仁的开放。
就像上周末在北京 OpenParty 上, ThoughtWorks 工程师所说的,虽然我并不是非常认同:公司内部对代码进行精细控制没有意义。代码没什么好隐藏的,有的公司代码拿出去还有害。(因为代码太烂?)
- 公司对代码库进行合理分解,对每个代码库分别授权。即某个代码库对团队成员完全开放,对其它团队完全封闭。
- 公司使用 Subversion 做集中式的版本控制,个人和/或团队,使用 Git-svn。这样在无法改变公司版本控制策略时,程序员采用的变通之法。
- Git 服务器的部署实际上可以使用钩子对 分支和路径进行写授权,即可以控制谁能够创建分支,能够写特定文件。
您有什么更好的建议呢?





最新评论