-
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 社区版 (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 相关功能,但作为一个成熟的项目,它提供了许多其他功能来帮助您的团队协同工作,例如项目维基和系统维护工具。GitLab 的一个好处是,一旦服务器设置并运行起来,您很少需要修改配置文件或通过 SSH 访问服务器;大多数管理和通用使用都可以通过浏览器界面完成。