git查看服务器运行的项目_使用Git运行服务器

git查看服务器运行的项目

正如我试图在4月7日Git成立14周年之前的系列中演示的那样, Git除了跟踪源代码外,还可以做很多事情。 信不信由你,Git甚至可以管理您的Git服务器,因此您可以或多或少地使用Git本身运行Git服务器。

当然,这涉及除日常Git之外的许多组件,其中最重要的就是Gitolite ,它是后端应用程序,用于管理您使用Git配置的巧妙位。 Gitolite的优点在于,由于它使用Git作为其前端接口,因此很容易将Git服务器管理集成到其他基于Git的工作流中。 Gitolite可以精确控制谁可以访问您服务器上的特定存储库以及它们具有哪些权限。 您可以使用常规的Linux系统工具自行管理此类事务,但是如果在六个用户中只有一个或两个以上的存储库,则需要大量的工作。

Gitolite的开发人员做了艰苦的工作,使您可以轻松地为许多用户提供对Git服务器的访问权,而又不让他们访问您的整个环境-您可以使用Git来完成所有工作。

什么不是 Gitolite是GUI管理员和用户面板。 出色的Gitea项目可提供这种体验,但是本文重点介绍Gitolite的简单优雅和令人舒适的熟悉程度。

安装Gitolite

假设您的Git服务器运行Linux,则可以使用软件包管理器安装Gitolite(在CentOS和RHEL上为yum ,在Debian和Ubuntu上为apt ,在OpenSUSE上为zypper ,依此类推)。 例如,在RHEL上:

 $ sudo yum install gitolite3 

许多存储库仍具有旧版本的Gitolite以提供旧版支持,但当前版本为版本3。

您必须具有对服务器的无密码SSH访问。 如果愿意,可以使用密码登录,但是Gitolite依赖SSH密钥,因此必须配置使用密钥登录的选项。 如果您不知道如何配置服务器以进行无密码SSH访问,请首先学习如何进行操作( Steve Ovens的Ansible文章的“设置SSH密钥认证”部分对此进行了很好的说明)。 这是安全服务器管理以及运行Gitolite的重要组成部分。

配置一个Git用户

没有Gitolite,如果某人请求访问您在服务器上托管的Git存储库,则必须向该人提供用户帐户。 Git提供了一个特殊的外壳git-shell ,它是仅执行Git任务的超特定外壳。 这使您拥有只能通过非常有限的Shell环境的过滤器访问服务器的用户。

该解决方案有效,但通常意味着用户可以访问服务器上的所有存储库,除非您具有用于组权限的良好模式,并在创建新存储库时严格维护这些权限。 它还需要在系统级别进行大量手动配置,这通常是为特定级别的系统管理员保留的区域,而不一定是通常负责Git存储库的人员。

Gitolite通过为需要访问任何存储库的每个人指定一个用户名来完全回避此问题。 默认情况下,用户名是git ,并且由于Gitolite的文档假定使用的是用户名,因此在学习该工具时保留它是一个很好的默认设置。 对于曾经使用过GitLab或GitHub或任何其他Git托管服务的人来说,这也是一个众所周知的约定。

Gitolite将此用户称为托管用户 。 在服务器上创建一个帐户以充当托管用户(我会坚持使用git,因为这是惯例):

  $ sudo adduser --create-home git 

为了控制git用户帐户,它必须具有属于您的有效公共SSH密钥。 您应该已经进行了此设置,因此将您的公钥( 而不是您的私钥cpgit用户的主目录中:


   
   
$ sudo cp ~/.ssh/id_ed25519.pub /home/git/
$ sudo chown git:git /home/git/id_ed25519.pub

如果您的公钥不以.pub扩展名结尾,则Gitolite将不会使用它,因此请相应地重命名该文件。 更改为该用户帐户以运行Gitolite的安装程序:


   
   
$ sudo su - git
$ gitolite setup --pubkey id_ed25519.pub

安装脚本运行后, git home的用户目录将具有一个存储库目录,该目录(现在)包含文件git-admin.gittesting.git 。 这就是服务器所需的全部设置,因此请注销。

使用乙醇钠

管理Gitolite只是在Git存储库中编辑文本文件,特别是gitolite-admin.git 。 您不会通过SSH进入服务器来进行Git管理,而Gitolite鼓励您不要尝试。 您和您的用户存储在Gitolite服务器上的存储库都是存储库,因此最好不要使用它们。


   
   
$ git clone git@example.com:gitolite-admin.git gitolite-admin.git
$ cd gitolite-admin.git
$ ls -1
conf
keydir

此存储库中的conf目录包含一个名为gitolite.conf的文件。 在文本编辑器中将其打开,或使用cat查看其内容:


   
   
repo gitolite-admin
    RW+     =   id_ed22519

repo testing
    RW+     =   @all

您可能对此配置文件的功能有所了解: gitolite-admin表示此存储库,并且id_ed25519密钥的所有者具有读取,写入和Git管理权限。 换句话说,Gitolite不会将用户映射到普通的本地Unix用户(因为所有用户都使用git托管用户身份登录),而是将用户映射到keydir目录中列出的SSH密钥。

testing.git存储库为使用特殊组符号访问服务器的每个人提供完全权限。

新增使用者

如果您要将一个名为alice的用户添加到您的Git服务器,则Alice人员必须向您发送其公共SSH密钥。 Gitolite使用.pub扩展名左侧的任何内容作为Git用户的标识符。 不要使用默认的密钥名称值,而是给密钥指定一个指示密钥所有者的名称。 如果用户有多个键(例如,一个键用于笔记本电脑,一个键用于台式机),则可以使用子目录来避免文件名冲突。 例如,爱丽丝在笔记本电脑上使用的密钥可能会作为默认id_rsa.pub出现在您面前 ,因此将其重命名为alice.pub或类似名称(或让用户根据计算机上的本地用户帐户命名密钥),然后放置将其放入gitolite-admin.git / keydir / work / laptop /目录。 如果她从您的桌面发送了另一个密钥,请将其命名为alice.pub (与上一个相同),然后将其添加到keydir / work / desktop /中 。 另一个密钥可能进入keydir / home / desktop / ,依此类推。 Gitolite递归地在keydir中搜索与存储库“用户”匹配的.pub文件,并将任何匹配项视为相同的标识。

将密钥添加到keydir目录时,必须将其提交回服务器。 忘记这是一件很容易的事情,这里有一个真正的理由是要使用像Sparkleshare这样的自动化Git应用程序,因此任何更改都将立即提交给您的Gitolite管理员。 第一次忘记提交和推送-浪费了三个小时的时间和用户的故障排除时间-您会看到Gitolite是使用Sparkleshare的完美理由。


   
   
$ git add keydir
$ git commit -m 'added alice-laptop-0.pub'
$ git push origin HEAD

默认情况下,爱丽丝可以访问testing.git目录,因此她可以使用该目录测试连接性和功能。

设定权限

与用户一样,目录权限和组是从您可能习惯于(或查找有关在线信息)的常规Unix工具中抽象出来的。 项目的权限在gitolite-admin.git / conf目录中的gitolite.conf文件中授予。 权限分为四个级别:

  • R允许只读。 在存储库上具有R权限的用户可以克隆它,仅此而已。
  • RW允许用户执行分支的快进推送,创建新分支和创建新标签。 对于大多数用户而言,或多或少,这就像一个“普通”的Git存储库。
  • RW +允许可能具有破坏性的Git动作。 用户可以执行常规的快进推送,倒带推送,重新设置基准以及删除分支和标签。 您可能想要或不希望将其授予项目的所有贡献者。
  • -明确拒绝访问存储库。 这与未在存储库的配置中列出的用户相同。

通过调整gitolite.conf来创建新的存储库或修改现有存储库的权限。 例如,授予Alice权限来管理一个名为widgets.git的新存储库:


   
   
repo gitolite-admin
    RW+     =   id_ed22519

repo testing
    RW+     =   @all

repo widgets
    RW+     =   alice

现在,爱丽丝(仅爱丽丝一个人)就可以克隆存储库:


   
   
[alice]$ git clone git@example.com:widgets.git
Cloning into 'widgets'...
warning: You appear to have cloned an empty repository.

最初,Alice必须使用-u选项将其分支发送到空存储库(因为她必须与任何Git主机有关)。

为了简化用户管理,您可以定义存储库组:


   
   
@qtrepo = widgets
@qtrepo = games

repo gitolite-admin
    RW+     =   id_ed22519

repo testing
    RW+     =   @all

repo @qtrepo
    RW+     =   alice

正如您可以创建组存储库一样,您可以对用户进行分组。 默认情况下,存在一个用户组: @all 。 如您所料,它包括所有用户,无一例外。 您可以创建自己的:


   
   
@qtrepo = widgets
@qtrepo = games

@developers = alice bob

repo gitolite-admin
    RW+     =   id_ed22519

repo testing
    RW+     =   @all

repo @qtrepo
    RW+     =   @developers

与添加或修改密钥文件一样,对gitolite.conf文件的任何更改都必须提交并推送才能生效。

创建一个仓库

默认情况下,Gitolite假定存储库的创建从上至下进行。 例如,有权访问Git服务器的项目经理将创建项目存储库,并通过Gitolite管理仓库添加开发人员。

实际上,您可能更愿意向用户授予创建存储库的权限。 Gitolite称这些为“野生仓库”(我不确定这是关于仓库的形成方式的评论,还是对配置文件所需的通配符的引用)。 这是一个例子:


   
   
@managers = alice bob

repo foo/CREATOR/[a-z]..*
    C   =   @managers
    RW+ =   CREATOR
    RW  =   WRITERS
    R   =   READERS

第一行定义了一组用户:该组称为@managers ,其中包含用户alicebob 。 下一行设置了通配符,允许在名为foo的目录中创建尚不存在的存储库,后跟一个为创建存储库的用户命名的子目录。 例如:


   
   
[alice]$ git clone git@example.com:foo/alice/cool-app.git
Cloning into cool-app'...
Initialized empty Git repository in /home/git/repositories/foo/alice/cool-app.git
warning: You appear to have cloned an empty repository.

野生回购的创建者有一些机制可以定义谁可以读取和写入其存储库,但是范围有限。 在大多数情况下,Gitolite假定由一组特定的用户来管理项目权限。 一种解决方案是使用Git挂钩向所有用户授予对gitolite-admin的访问权限,以要求经理批准将更改合并到master分支中。

学到更多

Gitolite具有比此介绍性文章涵盖的功能更多的功能,因此请尝试一下。 该文档非常出色,阅读完该文档后 ,您可以自定义Gitolite服务器,以向用户提供您满意的控制级别。 Gitolite是一种维护成本低,简单的系统,您可以安装,设置它,然后或多或少地将其忘却。

翻译自: https://opensource.com/article/19/4/server-administration-git

git查看服务器运行的项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值