-
1. 开始
-
2. Git 基础
-
3. Git 分支
-
4. Git 服务器
- 4.1 协议
- 4.2 在服务器上安装 Git
- 4.3 生成您的 SSH 公钥
- 4.4 设置服务器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管选项
- 4.10 总结
-
5. 分布式 Git
-
A1. 附录 A:其他环境中的 Git
- A1.1 图形界面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 总结
-
A2. 附录 B:在应用程序中嵌入 Git
-
A3. 附录 C:Git 命令
4.8 Git 服务器 - GitLab
GitLab
GitWeb 相当简单。 如果您正在寻找一个现代、功能齐全的 Git 服务器,您可以安装几个开源解决方案。 由于 GitLab 是其中一种流行的解决方案,我们将以它为例介绍如何安装和使用它。 这比 GitWeb 选项更难,需要更多的维护,但它是一个功能齐全的选项。
安装
GitLab 是一个数据库支持的 Web 应用程序,因此其安装比其他一些 Git 服务器更为复杂。 幸运的是,这个过程有很好的文档记录和支持。 GitLab 强烈建议通过官方 Omnibus GitLab 包在您的服务器上安装 GitLab。
其他安装选项包括:
-
GitLab Helm chart,用于 Kubernetes。
-
Dockerized GitLab 软件包,用于 Docker。
-
来自源文件。
-
云提供商,例如 AWS、Google Cloud Platform、Azure、OpenShift 和 Digital Ocean。
有关更多信息,请阅读GitLab Community Edition (CE) readme。
管理
可以通过 Web 访问 GitLab 的管理界面。 只需将您的浏览器指向安装 GitLab 的主机名或 IP 地址,并以 root
用户身份登录。 密码将取决于您的安装类型,但默认情况下,Omnibus GitLab 会自动生成密码并将其存储到 /etc/gitlab/initial_root_password 中至少 24 小时。 请参阅文档了解更多详细信息。 登录后,单击右上角菜单中的“管理区域”图标。
用户
每个使用您的 GitLab 服务器的人都必须拥有一个用户帐户。 用户帐户非常简单,它们主要包含附加到登录数据的个人信息。 每个用户帐户都有一个 **命名空间 **,它是属于该用户的项目的逻辑分组。 如果用户 jane 有一个名为 project 的项目,则该项目的 URL 将是 http://server/jane/project
。

您可以通过两种方式删除用户帐户:“阻止”用户会阻止他们登录到 GitLab 实例,但该用户命名空间下的所有数据都将被保留,并且使用该用户的电子邮件地址签名的提交仍将链接回其个人资料。
另一方面,“销毁”用户会将其从数据库和文件系统中完全删除。 其命名空间中的所有项目和数据都将被删除,并且他们拥有的任何组也将被删除。 这显然是一个更永久和更具破坏性的操作,您很少需要它。
群组
GitLab 群组是项目的集合,以及关于用户如何访问这些项目的数据。每个群组都有一个项目命名空间(与用户的方式相同),因此如果群组 training 有一个项目 materials,它的 URL 将是 http://server/training/materials
。

每个群组都与许多用户相关联,每个用户都对群组的项目和群组本身具有一定的权限级别。 这些级别从“访客”(仅问题和聊天)到“所有者”(完全控制群组、其成员和项目)不等。 权限类型太多,无法在此处一一列出,但 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 访问服务器; 大部分管理和常规使用都可以通过浏览器界面完成。