-
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) 自述文件。
管理
GitLab 的管理界面通过网络访问。只需将浏览器指向安装了 GitLab 的主机名或 IP 地址,并以 root 用户登录。密码将取决于你的安装类型,但默认情况下,Omnibus GitLab 会自动生成密码并将其存储到 /etc/gitlab/initial_root_password 中至少 24 小时。有关更多详细信息,请遵循文档。登录后,点击右上角菜单中的“Admin area”图标。
用户
使用你的 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 服务器就会执行一个 HTTP POST,其中包含一些描述性 JSON。这是将 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 仓库的直接推送访问权限。你可以通过转到该项目设置的“成员”部分,并将新用户与访问级别相关联(不同的访问级别在 群组 中有所讨论)来将用户添加到项目中。通过为用户提供“开发人员”或更高访问级别,该用户可以直接向仓库推送提交和分支。
另一种更松散的协作方式是使用合并请求。此功能使任何可以看到项目的用户都能够以受控方式贡献。具有直接访问权限的用户可以简单地创建一个分支,向其推送提交,并从其分支向 master 或任何其他分支打开合并请求。没有仓库推送权限的用户可以“fork”它以创建自己的副本,向他们的副本推送提交,并从他们的 fork 向主项目打开合并请求。此模型允许所有者完全控制进入仓库的内容和时间,同时允许来自不受信任用户的贡献。
合并请求和问题是 GitLab 中长期讨论的主要单元。每个合并请求都允许对建议的更改进行逐行讨论(这支持一种轻量级的代码审查),以及一般的整体讨论线程。两者都可以分配给用户,或组织成里程碑。
本节主要关注 GitLab 的 Git 相关功能,但作为一个成熟的项目,它还提供了许多其他功能来帮助你的团队协同工作,例如项目 Wiki 和系统维护工具。GitLab 的一个好处是,一旦服务器设置并运行,你很少需要调整配置文件或通过 SSH 访问服务器;大部分管理和一般使用都可以通过浏览器内界面完成。