X-lab2017 / oss101-bok

https://www.x-lab.info/oss101-bok/
2 stars 5 forks source link

3.3 社区基础设施 #41

Open Peng99999 opened 2 months ago

Peng99999 commented 2 months ago

1、术语和定义

1.1 社区基础设施

社区基础设施是指支持开源社区运作和项目开发的各种工具和平台。这些基础设施的例子包括但不限于:代码托管平台、门户网站、开发门禁、开发流水线、发布平台、安全工具、会议系统、邮件列表、知识管理工具、通讯工具、扫描工具、CLA 工具、DCO 工具、度量统计与分析工具等。这些基础设施的使用可以提高社区的协作效率、代码质量和安全性,促进社区成员的参与和贡献。

1.2 代码托管平台 code hosting platform

提供代码托管服务的平台。 注:代码托管平台通常还提供开源开发全生命周期所需的扩展服务。———— 团体标准:信息技术-开源-术语与综述(3.3.2)

1.3 版本管理工具 version control

辅助代码软件开发的代码管理工具,用以完成代码、文档修改的提交,并记录开源项目的变化历史。

2、标准解读

2.1 基本知识(知道)

社区基础设施包括但不限于:代码托管平台、门户网站、开发门禁、开发流水线、发布平台、安全工具、会议系统、邮件列表、知识管理工具、通讯工具、扫描工具、CLA 工具、DCO 工具、度量统计与分析工具等。这些基础设施的使用可以提高社区的协作效率、代码质量和安全性,促进社区成员的参与和贡献,其中最为重要的是代码托管平台和版本控制工具。

代码托管平台不仅为开发者提供了安全的代码存储环境,还提供了与其他贡献者进行协作的便捷途径,它通过公开托管的代码库,开发者能够随时查看和协作修改代码,推动项目的透明性和高效化以及开源文化的发展。同时,代码托管平台为开发者、贡献者和用户提供了沟通与协作的桥梁,促进社区的健康发展,它是现代软件开发特别是开源项目开发的基础设施之一。

版本管理工具记录开源项目的变化历史,允许开发者跟踪项目的各个版本,并在必要时恢复到先前的状态。版本管理工具在团队协作开发中尤为重要,它能够确保开发过程的有序性和透明度,使得不同贡献者能够并行工作,而不互相干扰。

2.2 深入理解(理解)

2.2.1 代码托管平台的功能与服务

除了提供代码托管服务,代码托管平台通常还为开源开发的全生命周期提供一系列扩展服务,以支持项目从创建到发布的各个阶段。这些扩展服务包括但不限于:

版本控制:大多数平台集成了 Git 等版本控制系统,帮助开发者跟踪代码的变更历史,并允许多人协同开发。 问题跟踪:平台提供 issue 跟踪功能,允许开发者和用户报告 bug、提出功能请求,并管理开发任务。 持续集成/持续交付(CI/CD):许多代码托管平台支持自动化构建和测试,确保项目的高效开发和快速迭代。 代码审查:提供代码审查工具,允许开发者在代码合并前进行审核,确保代码质量。 项目管理:集成项目管理工具,帮助开发团队进行任务分配和进度跟踪。 社区互动:支持用户通过讨论区、Pull Request 和 issue 评论进行互动,促进项目的协作和沟通。

2.2.2 版本管理工具的功能

版本控制:跟踪文件的每一次更改,记录谁在何时对哪些文件进行了修改,并生成相应的版本记录。这样,开发者能够随时回溯到任意版本,查看项目在不同时间点的状态。 协作与分支管理:支持多开发者并行协作,开发者可以在不同的分支上进行开发,并通过合并操作将各个分支的修改整合到主项目中。 冲突管理:在多位开发者对同一文件进行修改时,版本管理工具可以帮助识别并解决潜在的冲突,确保项目的稳定性。 变更历史记录:记录项目的所有变更日志,包括提交的时间、作者、修改内容等,方便开发者在后续开发中查阅和审计。 备份与恢复:在项目开发过程中,开发者可以随时将项目恢复到某个稳定的版本,这在修复 bug 或解决重大错误时尤其有用。

2.2.3 版本管理工具的类型

版本管理工具可以分为两大类:集中式分布式集中式版本管理工具:如 Subversion (SVN),所有的文件版本都存储在中央服务器上,开发者需要通过与服务器交互来进行提交和更新。这种工具适用于对项目的集中控制,但对离线工作不友好。 分布式版本管理工具:如 Git 和 Mercurial,每个开发者都有一个完整的项目历史副本,开发者可以在本地进行操作,无需实时连接服务器。Git 是目前最流行的分布式版本管理工具,广泛应用于全球开源项目中。

2.2.4 版本管理工具的扩展功能

随着开源项目的复杂化,现代版本管理工具通常还集成了更多扩展功能,以提高开发效率和项目管理能力:

持续集成/持续交付(CI/CD)集成:许多版本管理工具与 CI/CD 系统无缝集成,能够在每次提交后自动执行测试和部署流程,提高开发效率。 代码审查与拉取请求(Pull Request):特别是在 GitHub、GitLab 等平台上,版本管理工具与代码审查流程紧密结合,开发者可以通过拉取请求对代码进行审查和讨论,从而提高项目代码的质量。 项目管理与问题跟踪:一些版本管理工具与项目管理系统(如 Jira 或 GitHub Issues)集成,方便开发者在管理代码的同时,处理任务分配、问题跟踪和项目规划。

3、应用案例

3.1 代码托管平台

  1. GitHub GitHub是最受欢迎的Git代码托管平台之一,拥有庞大的开源社区和众多的公开项目。它提供了强大的协作工具和服务,包括问题跟踪、代码审查和项目管理等。GitHub的免费版为个人和公开项目提供无限的私有仓库。

  2. GitLab GitLab是一个开源的Git仓库管理工具,提供了从代码托管到CI/CD的一站式服务。它支持私有仓库免费使用,并且可以自行部署在私有服务器上。GitLab的集成CI/CD工具使得自动化部署和测试变得简单高效。

  3. Bitbucket Bitbucket是Atlassian公司推出的代码托管平台,特别适合专业团队使用。它与Jira、Confluence等Atlassian的其他产品紧密集成,提供了强大的项目协作能力。Bitbucket为小型团队提供免费的私有仓库。

  4. Coding Coding是国内领先的开发者服务平台,提供代码托管、WebIDE、持续集成等服务。它支持Git和SVN,为个人开发者和团队提供免费的私有仓库,并且拥有良好的中文支持。

  5. Gitee(码云) Gitee是一款基于Git的代码托管和研发协作平台,旨在为中国开发者提供高效、便捷的代码管理服务。它提供无限制的公开仓库和一定量的免费私有仓库,支持Git大文件存储(LFS)等特性。

  6. SourceForge SourceForge是一个为开源项目提供免费代码托管的平台,它支持Git、Mercurial和SVN。除了代码托管,SourceForge还为项目提供下载镜像、统计分析和问题跟踪等服务。

3.2 版本控制工具

  1. VSS VSS 的全称为 Visual Source Safe 。作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目。Windows平台下使用VSS开发的典型环境是基于C/S架构的,即开发小组的每个开发者在各自的Windows平台下利用开发工具(比如VC)开发项目中的各个模块,而配有专门的服务器集中控制开发过程中的文档和代码。服务器和开发人员的客户机分别装有VSS的服务器和客户端程序。VSS 没有采用对许可证进行收费的方式,只要安装了 VSS ,对用户的数目是没有限制的。因此使用 VSS 的费用是较低的。它属于“买大件送小件”的角色。如果你合法地得到Visual Studio,你就得到了免费的SourceSafe。

  2. CVS CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。

  3. SVN SVN是一个安全虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。 SVN能在跨接Internet, Intranet, Extranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。所以,我们可以将SVN看成是VPN、防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。

  4. GIT Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

  5. HG Mercurial是一个免费的分布式源代码管理工具。它可以有效地处理任何规模的项目,并提供简单直观的界面。Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。

4、总结

社区基础设施,包括代码托管平台和版本管理工具,是开源项目成功运作的关键组成部分。代码托管平台为开发者提供安全的代码存储和协作功能,并集成了项目管理、代码审查、持续集成等扩展服务,确保开发流程的透明性和效率。版本管理工具则负责跟踪代码的历史变化,支持开发者在不同分支上并行工作,并提供变更历史记录和冲突解决功能。它们保障了团队协作开发的有序进行,是现代软件开发中的重要工具。

5、推荐阅读

6、参考资料:

开源基础设施介绍:https://kaiyuanshe.github.io/oss-book/Open-source-Infrastructure.html#%E5%BC%80%E6%BA%90%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD