GLEP 36: Gentoo 托管项目使用 Subversion/CVS

作者 Aaron Walker <ka0ttic@gentoo.org>
类型 标准跟踪
状态 停滞
版本 1
创建日期 2004-11-11
最后修改日期 2017-11-12
发布历史 2005-03-13, 2005-03-21
GLEP 源代码 glep-0036.rst

状态

根据 2017 年 11 月 12 日 Gentoo 委员会的决定,标记为停滞。

摘要

允许 Gentoo 托管项目的维护人员在 Subversion/CVS 之间选择。

动机

通过提供版本控制系统的选择,需要或想要使用某些功能的开发者可以选择最适合他们或他们项目的版本控制系统。

此外,许多应该由 Gentoo 托管的项目,由于目前尚未提供 Subversion,因此托管在其他地方。 例如,app-vim/gentoo-syntax 软件包 ([1]) 和 app-shells/gentoo-bashcomp ([2])。

Subversion 比 CVS 具有许多优势,包括变更集、目录版本控制、原子提交、版本化的元数据以及更高效的分支和标记 ([3])。 尽管有这些优势,许多开发者认为 Subversion 由于扩展性问题,尚未准备好用于主树。

规范

以下步骤详细描述了设置 Subversion svnserve 守护进程(通过 SSH)和创建新存储库的过程。

每个项目应创建一个存储库。 这样做的原因包括:更容易控制访问权限、性能(检出大型存储库需要花费更长时间)、易用性(使用大型存储库进行分支和合并更加困难)以及有意义的版本号(因为 Subversion 使用全局存储库版本号,即使对项目 A 没有进行任何更改,项目 A 的版本号也会在每次提交时增加)。

对于现有的 CVS 存储库,除了 cvs2svn 文档本身 ([5]) 外,还有关于转换 ([4]) 的说明。

  1. 安装 dev-util/subversion

    $ emerge subversion
    
  2. 为 svnserve 编写包装脚本

    $ $EDITOR /usr/local/bin/svnserve-ssh && chmod +x \
    > /usr/local/bin/svnserve-ssh
    
    #!/bin/sh
    umask 002
    exec /usr/bin/svnserve "$@"
    
  3. 修改 svnserve rc 脚本

    $ cp /etc/init.d/svnserve /etc/init.d/svnserve-ssh
    $ sed -i 's:/usr/bin/svnserve:/usr/local/bin/svnserve-ssh:' \
    > /etc/init.d/svnserve-ssh
    
  4. 编辑 svnserve rc 配置

    $ ln -s /etc/init.d/svnserve /etc/init.d/svnserve-ssh
    $ $EDITOR /etc/init.d/svnserve
    

    SVNSERVE_OPTS="--root=/var/svnroot" SVNSERVE_USER="svn" SVNSERVE_GROUP="svn"

  5. 添加 svn 组和用户

    $ groupadd svn
    $ useradd svn -d /var/svnroot -s /bin/false -g svn
    
  6. 创建用于保存存储库的目录

    $ mkdir -p /var/svnroot/conf
    
  7. 要创建新存储库,只需运行

    $ svnadmin create --fs-type fsfs /var/svnroot/<repos>
    
  8. 确保新创建的/转换后的存储库具有正确的权限。 当然,基础设施可能需要以不同的方式执行此操作

    $ chown -Rf svn:users /var/svnroot/<repos>
    $ chmod -Rf 775 /var/svnroot/<repos>
    
  9. 启动它

    $ /etc/init.d/svnserve-ssh start
    $ rc-update add svnserve-ssh default
    

向后兼容性

在 Subversion 和 CVS 之间提供选择,绝不会导致任何向后兼容性问题。 那些喜欢使用 CVS 的开发者可以继续使用它,而不会产生任何负面影响。