章节 ▾ 第二版

4.8 服务器上的 Git - GitLab

GitLab

GitWeb 相当简单。如果你正在寻找一个现代的、功能齐全的 Git 服务器,有一些开源解决方案可供你安装。由于 GitLab 是其中一个受欢迎的选择,我们将以安装和使用它为例。这比 GitWeb 选项更难,需要更多的维护,但它是一个功能齐全的解决方案。

安装

GitLab 是一个由数据库支持的 Web 应用程序,因此其安装过程比其他一些 Git 服务器更复杂。幸运的是,这个过程有详细的文档和支持。GitLab 强烈建议通过官方的 Omnibus GitLab 软件包在你的服务器上安装 GitLab。

其他安装选项包括:

  • GitLab Helm chart,用于 Kubernetes。

  • Docker 化 GitLab 软件包,用于 Docker。

  • 从源代码文件安装。

  • 云服务提供商,如 AWS、Google Cloud Platform、Azure、OpenShift 和 Digital Ocean。

欲了解更多信息,请阅读 GitLab Community Edition (CE) readme

管理

GitLab 的管理界面通过 Web 访问。只需将浏览器指向安装 GitLab 的主机名或 IP 地址,并以 root 用户身份登录。密码将取决于你的安装类型,但默认情况下,Omnibus GitLab 会自动生成密码并将其存储到 /etc/gitlab/initial_root_password 至少 24 小时。请参阅文档了解更多详细信息。登录后,点击右上角菜单中的“Admin area”图标。

The “Admin area” item in the GitLab menu
图 50. GitLab 菜单中的“Admin area”项

用户

每个使用你的 GitLab 服务器的人都必须拥有一个用户帐户。用户帐户非常简单,主要包含与登录数据相关的个人信息。每个用户帐户都有一个命名空间(namespace),这是一个属于该用户的项目逻辑分组。如果用户 jane 有一个名为 project 的项目,那么该项目的 URL 将是 http://server/jane/project

The GitLab user administration screen
图 51. GitLab 用户管理界面

你可以通过两种方式删除用户帐户:“阻止(Blocking)”用户可防止他们登录 GitLab 实例,但该用户命名空间下的所有数据将保留,并且使用该用户电子邮件地址签名的提交仍将链接回其个人资料。

另一方面,“销毁(Destroying)”用户会将其从数据库和文件系统中完全删除。其命名空间中的所有项目和数据都将被删除,他们拥有的任何群组也将被删除。这显然是一个更永久和破坏性的操作,你很少需要用到它。

群组

GitLab 群组是项目的集合,以及有关用户如何访问这些项目的数据。每个群组都有一个项目命名空间(与用户相同),因此如果群组 training 有一个项目 materials,其 URL 将是 http://server/training/materials

The GitLab group administration screen
图 52. GitLab 群组管理界面

每个群组都关联着许多用户,每个用户对群组的项目和群组本身都拥有不同级别的权限。这些权限从“访客(Guest)”(仅限议题和聊天)到“所有者(Owner)”(完全控制群组、其成员和项目)。权限类型太多,无法在此列出,但 GitLab 在管理界面上提供了一个有用的链接。

项目

一个 GitLab 项目大致对应一个 Git 仓库。每个项目都属于一个命名空间,可以是用户或群组。如果项目属于用户,则项目所有者直接控制谁有权访问该项目;如果项目属于群组,则群组的用户级别权限将生效。

每个项目都有一个可见性级别,它控制谁有权读取该项目的页面和仓库。如果项目是私有的(Private),则项目所有者必须明确授予特定用户访问权限。内部(Internal)项目对任何已登录用户可见,而公共(Public)项目对所有人可见。请注意,这既控制 git fetch 访问,也控制对该项目 Web UI 的访问。

钩子

GitLab 支持项目级和系统级的钩子。对于这两种情况,GitLab 服务器在发生相关事件时,都会执行一个带有描述性 JSON 的 HTTP POST 请求。这是将你的 Git 仓库和 GitLab 实例连接到开发自动化其他部分(例如 CI 服务器、聊天室或部署工具)的好方法。

基本使用

使用 GitLab 的第一件事是创建一个新项目。你可以通过点击工具栏上的“+”图标来完成此操作。系统会要求你输入项目名称、它应该属于哪个命名空间以及其可见性级别。你在此处指定的大部分内容并非永久性的,稍后可以通过设置界面进行更改。点击“Create Project”,即可完成。

项目创建后,你可能希望将其与本地 Git 仓库连接。每个项目都可以通过 HTTPS 或 SSH 访问,两者都可用于配置 Git 远程。URL 在项目主页的顶部可见。对于现有的本地仓库,此命令将创建一个名为 gitlab 的远程,指向托管位置:

$ git remote add gitlab https://server/namespace/project.git

如果你没有仓库的本地副本,可以这样做:

$ git clone https://server/namespace/project.git

Web UI 提供了对仓库本身的几个有用视图的访问。每个项目的主页都显示最近的活动,顶部的链接将引导你查看项目的文件和提交日志。

协同工作

在 GitLab 项目上协同工作最简单的方式是授予每个用户对 Git 仓库的直接推送权限。你可以通过进入项目设置的“成员(Members)”部分,并将新用户与访问级别关联来向项目添加用户(不同的访问级别在 群组 中有所讨论)。通过授予用户“开发者(Developer)”或更高访问级别,该用户可以直接向仓库推送提交和分支。

另一种更解耦的协作方式是使用合并请求。此功能使任何可以看到项目的用户能够以受控的方式为其贡献。具有直接访问权限的用户可以简单地创建一个分支,向其推送提交,并从其分支向 master 或任何其他分支打开合并请求。对仓库没有推送权限的用户可以“fork”它以创建自己的副本,向副本推送提交,并从其 fork 向主项目打开合并请求。这种模型允许所有者完全控制进入仓库的内容和时间,同时允许来自不受信任用户的贡献。

合并请求和议题是 GitLab 中长期讨论的主要单元。每个合并请求都允许对提议的更改进行逐行讨论(这支持轻量级的代码审查),以及进行一般的整体讨论。两者都可以分配给用户,或组织到里程碑中。

本节主要关注 GitLab 的 Git 相关功能,但作为一个成熟的项目,它提供了许多其他功能来帮助你的团队协同工作,例如项目维基和系统维护工具。GitLab 的一个好处是,一旦服务器设置并运行起来,你很少需要调整配置文件或通过 SSH 访问服务器;大多数管理和一般使用都可以通过浏览器界面完成。

scroll-to-top