Git
章节 ▾ 第二版

4.8 Git 服务器 - GitLab

GitLab

尽管 GitWeb 非常简单,但如果您正在寻找一个现代的、功能齐全的 Git 服务器,那么您可以安装一些现有的开源解决方案。由于 GitLab 是其中一个流行的解决方案,因此我们将以安装和使用它为例进行说明。这比 GitWeb 选项更复杂,需要更多维护,但它是一个功能齐全的选项。

安装

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

其他安装选项包括:

  • GitLab Helm Chart,用于 Kubernetes。

  • 用于 Docker 的 Dockerized GitLab 软件包。

  • 从源文件安装。

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

有关更多信息,请阅读 GitLab 社区版 (CE) 自述文件

管理

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

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

用户

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

The GitLab user administration screen
图 51. GitLab 用户管理屏幕

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

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

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

The GitLab group administration screen
图 52. GitLab 组管理屏幕

每个组都与多个用户关联,每个用户对该组的项目和组本身都具有一定的权限级别。这些权限级别从“访客”(仅限问题和聊天)到“拥有者”(完全控制组、其成员和其项目)不等。权限类型过多,这里无法一一列出,但 GitLab 在管理屏幕上提供了一个有用的链接。

项目

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

每个项目都有一个可见性级别,该级别控制谁可以读取该项目的页面和仓库。如果项目为私有,则项目拥有者必须显式授予特定用户的访问权限。内部项目对任何已登录的用户可见,而公开项目对任何人都可见。请注意,这同时控制了git fetch访问以及对该项目的 Web UI 的访问。

钩子

GitLab 包括对钩子的支持,这些钩子可以在项目级或系统级使用。对于这两种情况,GitLab 服务器都会在发生相关事件时执行带有某些描述性 JSON 的 HTTP POST。这是一种将您的 Git 仓库和 GitLab 实例连接到开发自动化(例如 CI 服务器、聊天室或部署工具)的绝佳方式。

基本用法

使用 GitLab 时,您首先要做的就是创建一个新项目。您可以通过点击工具栏上的“+”图标来执行此操作。系统会提示您输入项目的名称、它应该属于哪个命名空间以及它的可见性级别。您在此处指定的大多数内容都不是永久性的,以后可以通过设置界面进行更改。点击“创建项目”,就完成了。

项目创建完成后,您可能需要将其与本地 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 仓库的直接推送访问权限。您可以通过转到该项目设置中的“成员”部分,并将新用户与访问级别相关联来将用户添加到项目(不同的访问级别在中有所讨论)。通过授予用户“开发者”或更高的访问级别,该用户可以直接将提交和分支推送到仓库。

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

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

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

scroll-to-top