金钱(警告)
** 状态:** 被贬值
如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:
** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。
** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。
介绍
Git 是一个很好的分布式版本控制系统,可以用来跟踪任何类型的项目的更改和代码,有时将 git 服务器配置为您的团队的项目是有帮助的。
Gitolite为 git 服务器提供了一个访问控制层,这样您就可以配置基于用户的 git 访问,而不需要随附的操作系统用户帐户。
我们将在Ubuntu 12.04 VPS上安装这些组件,本教程假定您在这个VPS上有常规用户帐户,具有sudo特权。如果您需要帮助,请使用本教程 在Ubuntu上设置用户帐户。
安装 去
使用您的常规用户帐户登录您的Ubuntu服务器。
我们将从 Ubuntu 的默认存储库中安装 git:
1sudo apt-get install git-core
我们现在已经安装了 git. 我们将想要配置一些东西以便 git 正常工作。
安装吉他
现在我们已经正确设置了 git,我们可以安装 gitolite 来管理用户访问我们的存储库。
Gitolite 也可在 Ubuntu 的默认存储库中使用。
1sudo apt-get install gitolite
Gitolite 通过 git 管理其配置! 为了正确设置,我们将创建一个操作系统用户,其唯一功能是与 gitolite 交互。
操作系统用户将被命名为git
,以便我们的合作者能够轻松记住,我们不会设置密码,以便它只能通过使用su
命令访问。
1sudo adduser --system --group --shell /bin/bash --disabled-password git
我们现在有一个名为git
的用户,将处理gitolite配置,我们需要能够从正常帐户访问这个用户,我们将通过配置与git管理相关的SSH密钥来做到这一点。
配置 SSH 密钥用于 Git 管理
在您的本地计算机上,您将使用它来管理 git 和 gitolite,如果您还没有这样做,则需要创建一个 SSH 密钥对。
** 注意:如果您已经创建了一个密钥对,您应该跳过这个命令,以避免重写您的 SSH 密钥。
1ssh-keygen -t rsa
接受默认位置,然后按ENTER
,以配置基于密码的登录,而无需密码。
将公共密钥复制到 git 服务器,键入:
scp ~/.ssh/id_rsa.pub regular_username@git_server_IP_address:/tmp/git-admin.pub
如果您遵循初始服务器设置文章,则需要允许 SSH 访问 git 用户,您可以通过编辑 /etc/ssh/sshd_config
并将 git 添加到 AllowUsers
指令中来完成此操作。
sudo service ssh restart
配置Gitolite
接下来的步骤将发生在我们的 git 服务器上. 重新登录您的正常用户。
我们可以与我们的git
用户登录,以使用我们刚刚转移的公共密钥初始化gitolite。
1sudo su - git
现在,我们可以用以下命令设置 gitolite:
1gl-setup /tmp/git-admin.pub
点击ENTER
,将配置拖入您的编辑器. 扫描内容,以确保默认配置满足您的需求。
完成后,保存并退出文件。
如何管理Gitolite
在本地计算机上,您可以开始管理gitolite。
如果您尚未在此计算机上安装 git,则需要安装它:
1sudo apt-get install git-core
首先,我们需要将gitolite信息从我们的git服务器克隆到我们的本地机器:
git clone git@git_server_IP_address:gitolite-admin
这将在当前的目录中创建一个名为gitolite-admin
的新目录,在这里,我们可以对我们的访问策略进行更改,然后将这些更改推向 git 服务器。
向 Gitolite 添加新用户
要将用户添加到您的项目中,您将需要他们的公共密钥。Gitolite通过将登录的用户名与具有相同名称的公共密钥联系起来。
在本地机器上,我们可以切换到gitolite-admin
目录,看看里面是什么:
1cd gitolite-admin
2ls
1conf keydir
内部有两个目录:conf和keydir.毫不奇怪,keydir包含用户密钥。
你会与John
进行通信,并获得他计划使用的公共密钥,然后将该密钥复制到此目录中,如下:
cp /path/to/john's/public/key.pub ~/gitolite-admin/keydir/john.pub
之后,您需要将新公钥添加到 git 存储库中。
首先,我们要配置与管理 git 操作相关联的用户名和电子邮件。
git config --global user.name "your_name_here" git config --global user.email "[email protected]"
您可能还想配置 git 以使用您选择的编辑器。 输入此命令来指定您的偏好:
git config --global core.editor your_editor_choice
现在,我们可以将新文件添加到 git:
1git add keydir/john.pub
用一个消息承诺更改:
git commit -a -m "New user John added"
将更改推到 git 服务器以保存结果:
1git push
使用 Gitolite 配置访问
当您在最后一节中添加了用户时,您可能已经注意到这样的警告:
1remote:
2remote: ***** WARNING *****
3remote: the following users (pubkey files in parens) do not appear in the config file:
4remote: john(john.pub)
您将收到一个消息,即新用户不在 config 文件中,这意味着用户john
已知为 gitolite,但没有为他创建访问。
我们可以通过编辑 ~/gitolite-admin/conf/gitolite.conf
文件轻松地将其添加到我们的配置中。
但是我们会更进一步,给他自己的存储库,我们会创建一个名为johnsproject
的存储库,并给他访问权限:
1nano ~/gitolite-admin/conf/gitolite.conf
1repo gitolite-admin
2 RW+ = git-admin
3
4repo testing
5 RW+ = @all
正如你所看到的,语法相当简单。
我们指定一个 git 存储库,然后是repo
的关键字,然后是其名称,在其下方,我们写入特权类型,等级符号 (=),以及应该获得该访问的用户。
可以用这样的一条线来定义组:
@group_name = user1 user2 user3
之后,我们可以通过引用组来引用一些用户:
repo some_repo
RW+ = @group_name
一个名为@all
的特殊组基于背景,引用所有用户或所有存储库。
允许可以是这些值之一:
- R:只读访问
- RW: 可以读取或推新更改. 无法删除在git服务器上已经存在的refs.
- RW+: 可以在服务器上摧毁或删除refs。
我们可以通过将这些行添加到文件末尾,给john
完全访问一个名为johnsproject
的新存储库:
1repo johnsproject
2 RW+ = john
保存并关闭文件。
现在,我们可以用一个新的信息来承诺这一变化:
git commit -a -m "Made John's repo"
最后,将更改推到 git 服务器:
1git push
现在,约翰
应该能够用以下命令克隆他的项目存储库,从他创建的公钥和私钥的计算机:
git clone git@git_server_IP_address:johnsproject
结论
您应该能够轻松创建 git 用户,而不必担心每次配置伴随操作系统的用户和权限。
如果您正在管理多个项目与多样化的团队,可能最好设置相应的项目组,也可以将keydir
密钥组织成基于项目的子目录,Gitolite 将以相同的方式使用它们,但它们将更容易找到用于管理目的。