Git
章节 ▾ 第二版

4.2 服务器上的 Git - 在服务器上获取 Git

在服务器上获取 Git

现在我们将介绍如何在您自己的服务器上设置运行这些协议的 Git 服务。

注意

这里我们将演示在基于 Linux 的服务器上进行基本、简化的安装所需的命令和步骤,但您也可以在 macOS 或 Windows 服务器上运行这些服务。在您的基础设施中实际设置生产服务器肯定会涉及安全措施或操作系统工具方面的差异,但希望这能让你大致了解所涉及的内容。

要初始设置任何 Git 服务器,您必须将现有仓库导出到新的裸仓库(没有工作目录的仓库)。这通常很简单。要克隆您的仓库以创建新的裸仓库,您需要运行带 --bare 选项的克隆命令。按照惯例,裸仓库目录名称以 .git 后缀结尾,如下所示

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

您现在应该在 my_project.git 目录中拥有 Git 目录数据的副本。

这大致等同于

$ cp -Rf my_project/.git my_project.git

配置文件中有一些细微的差别,但对于您的目的,这几乎相同。它仅包含 Git 仓库本身,不包含工作目录,并为此单独创建一个目录。

将裸仓库放在服务器上

现在您已经拥有了仓库的裸副本,您需要做的就是将其放在服务器上并设置协议。假设您已经设置了一个名为 git.example.com 的服务器,您可以通过 SSH 访问它,并且希望将所有 Git 仓库存储在 /srv/git 目录下。假设该服务器上的 /srv/git 存在,您可以通过将裸仓库复制到该服务器来设置您的新仓库

$ scp -r my_project.git [email protected]:/srv/git

此时,其他对该服务器上的 /srv/git 目录具有 SSH 基于只读访问权限的用户可以通过运行以下命令克隆您的仓库

$ git clone [email protected]:/srv/git/my_project.git

如果用户通过 SSH 登录服务器,并且对 /srv/git/my_project.git 目录具有写入权限,那么他们也会自动拥有推送权限。

如果使用 --shared 选项运行 git init 命令,Git 会自动为仓库正确添加组写入权限。请注意,运行此命令不会破坏任何提交、引用等。

$ ssh [email protected]
$ cd /srv/git/my_project.git
$ git init --bare --shared

您可以看到,将 Git 仓库变成裸版本并将其放在您和协作者可以访问的服务器上是多么容易。现在您已准备好协作处理同一个项目。

重要的是要注意,这确实是您运行一个可以供多人访问的有用 Git 服务器所需要做的全部事情 - 只是在服务器上添加可通过 SSH 访问的账户,并将裸仓库放在所有用户都可以读写访问的某个地方。您已准备好开始 - 不需要其他任何东西。

在接下来的几节中,您将了解如何扩展到更复杂的设置。这将包括不为每个用户创建用户账户、为仓库添加公共只读访问权限、设置 Web UI 等等。但是,请记住,要与几个人协作处理私人项目,您所需要的只是一台 SSH 服务器和一个裸仓库。

小型设置

如果您是一个小型团队,或者只是在组织中试用 Git,并且只有几个开发人员,事情会很简单。设置 Git 服务器最复杂的部分之一是用户管理。如果您希望某些仓库对某些用户只读,而对其他用户读写,那么访问权限和权限可能会更难安排。

SSH 访问

如果你有一个所有开发人员都有 SSH 访问权限的服务器,那么通常最容易在该服务器上设置你的第一个仓库,因为你几乎不需要做任何工作(正如我们在上一节中所述)。如果你想要对你的仓库进行更复杂的访问控制类型的权限,你可以通过服务器操作系统的正常文件系统权限来处理它们。

如果你想将你的仓库放在一台没有为你的团队中所有想要授予写入权限的用户提供帐户的服务器上,那么你必须为他们设置 SSH 访问权限。我们假设如果你有一个服务器可以用来做这件事,你已经安装了 SSH 服务器,并且这就是你访问服务器的方式。

有几种方法可以让你为你的团队中的每个人提供访问权限。第一种方法是为每个人设置帐户,这很直接,但可能会很麻烦。你可能不想运行 adduser(或可能的替代方案 useradd)并必须为每个新用户设置临时密码。

第二种方法是在机器上创建一个名为 'git' 的单一用户帐户,让每个有写入权限的用户发送他们的 SSH 公钥给你,并将该密钥添加到该新 'git' 帐户的 ~/.ssh/authorized_keys 文件中。在那时,每个人将能够通过 'git' 帐户访问该机器。这不会以任何方式影响提交数据——你连接的 SSH 用户不会影响你记录的提交。

另一种方法是让你的 SSH 服务器从 LDAP 服务器或你可能已经设置的其他集中式身份验证源进行身份验证。只要每个用户都可以获得机器上的 shell 访问权限,任何你能想到的 SSH 身份验证机制都应该有效。

scroll-to-top