Gitolite轻松部署/管理gitserver枪侠

对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻。它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作、同步代码时,也仅仅是多一条指令而已。如果你想了解git的全貌,可以看《Progit》,他有中文版,貌似没有维护到最近的,需要的可以googleit。

Git使用者的日常流程:

1、从gitserver远程库上clone一个副本到本地库(gitclone),

2、本地开发,然后本地提交修改(gitadd改动的文件;gitcommit提交);无限循环这个周期。

3、第3、4步是和服务器同步。先把远程库的改动抓下来,本地解决版本合并有问题的地方(gitpull)

4、然后把合并后的本地代码库提交到远程库(gitpush);按你的团队计划,也许每天一次。

5、另外,user除了与服务器同步外,也可以与其他协作者直接同步;如上图左和中间的头像标示。

以下介绍的,是使用gitolite管理gitserver,进行源代码的团队协作。本文的读者最好有linux的经验。

Gitolite介绍

其实,每一个Git库只需要–bare-shared就可以简单实现类似共享代码库服务器的功能,在git的世界,代码都是自由share的,每个人扮演的角色,和linux系统赋予这个用户的权限有关。但如果采用这种SSHauthorized_keys的方式,直接系统通过shell进行gitclone的方法,会缺少了一项很必须的权限管理——每个用户对某个repository中所有项目均拥有完整的读写权限(可通过linux系统的权限设定,但依然麻烦),如果在一些大项目,涉及到多种角色权限,并要指定访问路径时,直接管理authorized_keys的方式,就显得力不从心,试想一下如果你要管理超过1000号人的authorized_keys?

Gitolite安装步骤

gitolite的安装其实非常简单,官方网址上给出的quickinstall仅仅4步,需要的可以看这里。另外,gitolite也有多种安装模式,例如

1、使用安装包自动安装;apt-getinstall/yuminstall

2、使用root帐号手动安装为全局应用,这样每一个服务器上的用户都可以开设代码仓库;

3、或手动在指定的普通用户帐号下安装。

以下的安装使用上述第三种方法,这样会最小程度“污染”你的server运行环境,并且能随时更新到最新版本的gitolite。

安装环境

1、假设我们现在有两台机器,serverandclient;

2、我们指定管理gitserver的管理员叫sunny;

3、并有一个普通的clientuser帐号jacob

下面的步骤,只是step-by-step的how-to,没有太多的why,如果要详细研究,请看gitolite的官方文档,或蒋鑫的编著《git权威指南》。

另外,gitolite的安装,会依赖git,如果你的服务器上还没安装git套件,请先自行安装。

fordeb系:apt-getinstallgit-core或apt-getinstallgit

forRH系:yuminstallgit

步骤

root@server#adduser--system--shell/bin/bash--groupgituser2.给用户gituser设定密码,在SSH公钥建立后可以把这个密码禁掉

root@server#passwdgituser3.管理员在本地创建一个sshkeypair对

sunny@client$ssh-keygen如果你不想影响本机现有的一些keypair,可用-f参数

sunny@client$ssh-keygen-fsunny_key4.推送管理员的公钥到remoteserver

sunny@client$ssh-copy-id-i~/.ssh/id_rsa.pubgituser@server如果是用带有-f参数生成的,注意这里要指向正确的文件

sunny@client$sshgituser@server6.执行

gituser@server$mv.ssh/authorized_keyssunny.pub7.下载源码安装,或自动安装;推荐源码安装,也就三个命令;如install时候提示git版本tooold,可以下载旧版本的gitolite,例如2.1的,或者1.5.9之后的,如需要下载旧版本,点击这里

gituser@server$gitclonegit://github.com/sitaramc/gitolite#下载源码gituser@server$gitolite/src/gl-system-install#如果提示gittooold,请下载旧版本的gitolitegituser@server$gl-setup-q~/sunny.pub执行gl-setup时几点注意:

gl-setup要放到$PATH,请确定~/bin已放在PATH变量,如没有,请编辑~/.bashrc,最后面添加

PATH=~/bin:$PATH并执行以下命令生效:

sh~/.bashrc旧版本的gl-setup,没有-q参数,如使用旧版本gitolite(例如1.5.9),直接赋参数即可

gituser@server$gl-setup~/sunny.pub8.直接package管理工具安装(如不需要的请跳过)

Gitolite的管理及权限设定

gitolite的管理,包括用户管理和代码库管理,都是通过操作一个指定名称的库来实现:gitolite-admin仓库。因此gitolite的管理员sunny需要先把这个库抓到本地,进行必要的配置后,再push到remote服务器,让设定生效:

抓取gitolite-admin仓库到本地

sunny@client$gitclonegituser@server:gitolite-adminsunny@client$cdgitolite-admin1.新增用户

先要获取待加用户(jacob)的pubkey,如果不知道怎么获取,请让jacob参考上述第三步生成他自己的id_rsa.pub

sunny把用户jacob的pubkey,放到gitolite-admin/keydir目录,并重命名为jacob.pub

sunny@client:~/gitolite-admin$gitadd.sunny@client:~/gitolite-admin$gitcommit-m"addjacobpubkey"sunny@client:~/gitolite-admin$gitpush此时jacob已增加到gitolite,但是,除了系统自带的testing库外,他操作不了其他的库

2.新增并设定代码库

现在要在remoteserver新建一个代码仓proj,依然是对gitolite-admin进行配置

编辑gitolite-admin/conf/gitolite.conf,仿照以后的库的格式,添加:

repoproj_a#这里设定是新增库的名称RW+=sunny#R是读权限,W是写权限,+是包括“强制更新一个分支,删除分支和更新一个Tag”的权限RW=jacob#设定RW权限的人执行add,commmit,push进行推送,即可

sunny@client:~/gitolite-admin$gitadd.sunny@client:~/gitolite-admin$gitcommit-m"addanewrepo"sunny@client:~/gitolite-admin$gitpushgitolite.conf的格式其实有相当多的复杂配置(详情请看官方手册),一般来说,象以下这样的,已够几个人的开放型小团队使用,例如:

@proj_a=sunnyjacob#@proj_a是分组命名,分组用@表示,可以在后面引用分组@proj_b=sunnytaylorjean#如果有多个用户,用空格隔开@admins=sunny@qa=elapseflora@engineers=sunnyjacobtaylorjean@staff=@admins@qa@engineers#分组可以被引用

repogitolite-admin#这个是gitolite的管理仓库,sunny是指定可以对其进行操作的管理员RW+=sunny

repoproj_aRW+=@adminsRW=@proj_aelapse

repoproj_bRW+=sunnyRW=@engineersfloraRrefs/tags/=@qa#这里设定的,是QA这个组,对refs/tags/开头的路径的文件只有读权限

repotestingRW+=@stall

3.普通用户签出操作

例如jacob要把代码库checkout出来,本地修改,然后再和remote库的代码进行版本合并。这些操作是纯粹的git操作了,团队的日常开发流程,正是这样子开展。请参阅本文一开头的那副git工作流程图,以下是几种不同情况的用户签出。

把remote库抓取下来,然后才开始修改

jacob@client:~$gitclonegituser@server:proj_a#项目默认放到proj_a目录或jacob@client:~$gitclonegituser@server:proj_amy_proj_a#项目被下载到my_proj_a目录下jacob本地已有一个现成的项目proj_a正在开发,并用git在管理着,现在想share到这个项目到proj_a

jacob@client:~$cdproj_ajacob@client:~/proj_a$gitpush--allgituser@myserver:proj_a#推送到remoteserver如果希望在当前目录使用一个已有的库(即合并项目),那样比较复杂,要采取非常规方法,替换.git/config文件才行

4.删除用户

管理员在本地,删除了gitolite-admin/keydir目录下对应的用户pubkey,然后执行git的rm操作,再commit,push推送,即可

sunny@client:~/gitolite-admin$rm-fkeydir/jacob.pubsunny@client:~/gitolite-admin$gitrmkeydir/jacob.pubsunny@client:~/gitolite-admin$gitcommit-m"deleteauser"sunny@client:~/gitolite-admin$gitpush5.删除代码库

gitolite没有删除repo的代码,如要删除repo,管理员要分两步走:

root@server:/home/gituser/repositories$rm-Rfproj_a.git#库对应proj_a的目录,带.git结尾6.修改代码库的名字

改名,也是分两步,和上面执行删除的顺序反过来,

先用gituser帐号或root帐号进入服务器,cdrepositories,执行移动

root@server:/home/gituser/repositories$mvproj_a.gitproj_b.git回到客户端,修改conf/gitolite.conf,把old-name的地方修改为new-name,然后add,commit并push

7.列出本人拥有权限的库

jacob@client:sshgituser@server例如会返回:

hellojacob,thegitoliteversionhereis1.5.4-2+squeeze1~bpo50+1(Debian)thegitoliteconfiggivesyouthefollowingaccess:RWproj_a@R@WtestingConnectionto192.168.0.101closed.上面列出的proj_a和testing,就是用户jacob所能操作的库,并都拥有R和W的权限。

附记

如果你对ssh很熟悉的话,gitolite的安装与使用,那是问题不大的。若你对ssh和git两者都不十分了解,使用起来可能会不算顺利。本文是gitolite配置使用的step-by-step,对于配置文件gitolite.conf,以及gitolite所支持的强大权限管理、路径正则匹配、user命名空间、和gitweb整合、委托管理以及代码库镜像备份等等,都没有叙述。如果你需要这些进阶知识,推荐看官方的帮助文档,以及《gitolite构建git服务器一文》。

THE END
1.Gitolite安装及使用说明wlbddkeydir/ 该目录存放了用户的公钥文件,推到服务器后 gitolite 会自动将其权限添加到 ~/.ssh/authorized_keys 文件中 5、修改管理员的公钥 上面设置了 git 账号,所以在这一步中一定要切换到 git 账号才能操作,否则 gitolite 会把配置文件写到其他用户的根目录下。 http://blog.chinaunix.net/uid-30497107-id-5870735.html
2.Github被微软收购,这里整理了16个替代品10.Gitolite 可以本地部署的Git代码管理工具,提供了非常到位的权限管理等等功能。 11Gitea Gitea 是一个开源社区驱动的 Gogs 克隆, 是一个轻量级的代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证. 12.Perforce 非常适合企业级使用,很强大,很健壮。 https://www.imooc.com/article/34987
3.Ubuntu安装Gitlabsudo -u git sh -c 'gitolite/install -ln /home/git/bin' sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub sudo chmod 0444 /home/git/gitlab.pub sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub" ...https://developer.aliyun.com/article/482561
1.GilsoniteDefinition&MeaningMerriamThe meaning of GILSONITE is —used for asphalt.https://www.merriam-webster.com/dictionary/Gilsonite
2.legit是什么意思legit怎么读中文意思用法legit legit是什么意思、legit怎么读 读音:英[l?'dt] 美[l?'dt] legit 基本解释 a. 合法的, 正统的, 守法的 legit 网络释义 adj. 合法的 n. 正统剧;正统剧院 legit 词性变化 名词复数形式:legits 中文词源 legit 合法的https://danci.gjcha.com/legit.html
3.Stellite项目推荐Stellite 是一个开源的客户端库和服务器应用程序,旨在通过 Google 开发的 QUIC 协议简化客户端/服务器应用程序的开发、构建和实现。该项目由 LINE 公司基于 Chromium 项目开发,主要使用 C++ 编程语言。 项目核心功能 Stellite 项目的主要功能包括: QUIC 协议支持:提供基于 QUIC 协议的快速和稳定的连接,适用于移动应用...https://blog.csdn.net/gitblog_00142/article/details/143768118
4.GitoliteGitoliteallows you to hostGitrepositories for multiple users easily and securely. Installation Installthegitolitepackage. Configuration Installing gitolite automatically adds thegitoliteuser to the system, with home directory/var/lib/gitolite. Admin SSH access ...https://wiki.archlinux.org/index.php/Gitolite
5.GitHubhuer0625/gitolite huer0625/gitolitePublic forked fromsitaramc/gitolite NotificationsYou must be signed in to change notification settings Fork0 Star0 master BranchesTags Code This branch is231 commits behindsitaramc/gitolite:master. Repository files navigation...https://github.com/huer0625/gitolite
6.ddevlaravelbreezeddev-laravel-breeze-sveltekitMonorepo是一个用于Laravel Breeze项目的多仓库解决方案,它支持在DDEV(Ddev)环境中使用PHP和Node.js进行开发。这个项目的目标是提供一个统一的代码库,使得开发人员可以在同一个仓库中管理Laravel项目的不同部分,包括API端点、前端组件和后端服务。 在SvelteKit项目中,可以使用这个多仓库解决...https://php.code.coder100.com/index/index/content/id/51844
7.MultpleMaster是什么字体?众识社区识字体网BPG Glaho Print 75.5% 商用须授权 MyriadPro-SemiboldSemiCn 75.1% 商用须授权 KufyanArabic-Heavy 75.1% 商用须授权 Mute Semibold 75.1% 商用须授权 Univia W03 Medium 75% 商用须授权 UniviaPro-Medium 75% 商用须授权 Biilmann-Bold 75% 商用须授权 Riga-Medium 75% 商用须授权 其他...https://app.likefont.com/community/111512354/
8.一款高颜值现代化的Git可视化管理工具简介:GitButler 是由 GitHub 联合创始人 Scott Chacon 开源的 Git 客户端,采用 Tauri/Rust/Svelte 构建。它支持虚拟分支、轻松提交管理、GitHub 集成、SSH 密钥管理和 AI 工具等功能,目前仅支持 macOS 和 Linux 平台。用户可以通过拖拽方式快速聚合多个分支的改动,实现灵活的跨分支操作。 http://help.liiix.com/?article/1638695
9.GitoliteSubscribe: gitolite+subscribe@googlegroups.com Post: gitolite@googlegroups.com (If you're unwilling to join the mailing list, you can still send me direct mail if it's something simple, obvious, or quick. But if the issue needs multiple mails and/or some discussion, I prefer the mailing ...http://www.gitolite.com/
10.huit/gitolite·HostGitrepositorieswithgitolite...NOTE: you must generate the SSH public key for the management user yourself (either with your own Puppet manifest, or manually) and install it before gitolite will work properly. See the documentation. Parameters: user name of gitolite management user (default "gitolite") password HASHED (not...https://forge.puppetlabs.com/huit/gitolite
11.gitolite安装和使用51CTO博客gitolite管理客户端:通过克隆服务端的gitolite-admin来管理用户和权限,设置完之后,再上传到服务端 gitolite服务端:存储代码,包括gitolite-admin 管理客户端IP:192.168.1.105 服务端的IP:192.168.1.52 注:管理客户端和服务端可以在同一台机器上 1、创建git用户 ...https://blog.51cto.com/slevin/1566641
12.使用gitolite搭建git服务器9:在 git 用户下安装 gitolite 在git用户的/home下面,执行 git clone https://github.com/sitaramc/gitolitemkdir-p$HOME/bin gitolite/install-to$HOME/bin ls 1 2 3 4 可以看到有两个目录bin,gitolite 10:设置管理员的私钥 在git用户下的/bin目录下,执行 ...https://www.freesion.com/article/9328121891/
13.将现有的git信息库推送到gitolitegitpushSO中文参考[我已经在Ubuntu服务器上设置了gitolite,可以添加用户,创建空的存储库,克隆空的存储库,添加文件,在本地提交,以及git push origin master将其发送到gitolite。 我还可以在XCode4中创建一个具有自己的git存储库的项目,并在本地提交更改。 现在,我想在甘露石中有另一个副本(可能是其他人可以使用的副本,也可以作为另...https://www.soinside.com/question/FdU3u7XVJsft69TKgfPXBQ
14.Gitolite服务器搭建及使用教程在安装gitolite时我们要指定bianjb为管理员,是依据bianjb用户的ssh-key来指定的。 讲明了上面三点,下面开始安装Gitolite。 这里使用的是ubuntu14.04平台,其它ubuntu版本也是类似的。 前面说了,我们需要使用ssh协议访问gitolite服务器,gitolite服务器是本质上是一个git仓库,所以首先需要安装基本包git和ssh-server,再安装gi...https://www.jianshu.com/p/593b7e138672
15.一键备份gitolite服务器的Shell脚本linuxshell这篇文章主要介绍了一键备份gitolite服务器的Shell脚本,需要的朋友可以参考下 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 运行一次就能够把gitolite服务器上的仓库备份到本地. 第一次运行会创建远程仓库的本地镜像, 以后每次运行会把本地镜像更新. ...https://www.jb51.net/article/54594.htm
16.Rockchip平台rk3588源码下载编译(基于Android13)专栏Gitolite搭建 服务器端操作 以服务器地址10.10.10.206为例进行说明: 1.创建一个名为git的系统用户: sudo adduser --system --shell /bin/bash --group git sudo passwd git 1 2 登录后即可复制 1.使用git用户登录服务器。 2.确保~/.ssh/authorized_keys文件为空或不存在。 https://www.ebaina.com/articles/140000017004
17.Git核心技术:在Ubuntu下部署Gitolite服务端到目前这一步我们差不多已经完成了Gitolite Server的配置,不过我们需要设置一个管理员权限的客户端,详见Git核心技术:在Ubuntu下为Gitolite添加管理端。 总结 本章简单完成了Gitolite的安装,在接下来的章节会对仓库创建、权限控制等进行更新。 有问题要问? https://cloud.tencent.com/developer/article/1361024