对于提供公共的,非授权的只读访问,我们可以抛弃 HTTP 协议,改用 Git 自己的协议,这主要是出于性能和速度的考虑。Git 协议远比 HTTP 协议高效,因而访问速度也快,所以它能节省很多用户的时间。
重申一下,这一点只适用于非授权的只读访问。如果建在防火墙之外的服务器上,那么它所提供的服务应该只是那些公开的只读项目。如果是在防火墙之内的 服务器上,可用于支撑大量参与人员或自动系统(用于持续集成或编译的主机)只读访问的项目,这样可以省去逐一配置 SSH 公钥的麻烦。
但不管哪种情形,Git 协议的配置设定都很简单。基本上,只要以守护进程的形式运行该命令即可:
git daemon --reuseaddr --base-path=/opt/git/ /opt/git/
这里的 --reuseaddr
选项表示在重启服务前,不等之前的连接超时就立即重启。而 --base-path
选项则允许克隆项目时不必给出完整路径。最后面的路径告诉 Git 守护进程允许开放给用户访问的仓库目录。假如有防火墙,则需要为该主机的 9418 端口设置为允许通信。
以守护进程的形式运行该进程的方法有很多,但主要还得看用的是什么操作系统。在 Ubuntu 主机上,可以用 Upstart 脚本达成。编辑该文件:
/etc/event.d/local-git-daemon
加入以下内容:
start on startup
stop on shutdown
exec /usr/bin/git daemon \
--user=git --group=git \
--reuseaddr \
--base-path=/opt/git/ \
/opt/git/
respawn
出于安全考虑,强烈建议用一个对仓库只有读取权限的用户身份来运行该进程 — 只需要简单地新建一个名为 git-ro
的用户(译注:新建用户默认对仓库文件不具备写权限,但这取决于仓库目录的权限设定。务必确认 git-ro
对仓库只能读不能写。),并用它的身份来启动进程。这里为了简化,后面我们还是用之前运行 Gitosis 的用户 'git'。
这样一来,当你重启计算机时,Git 进程也会自动启动。要是进程意外退出或者被杀掉,也会自行重启。在设置完成后,不重启计算机就启动该守护进程,可以运行:
initctl start local-git-daemon
而在其他操作系统上,可以用 xinetd
,或者 sysvinit
系统的脚本,或者其他类似的脚本 — 只要能让那个命令变为守护进程并可监控。
接下来,我们必须告诉 Gitosis 哪些仓库允许通过 Git 协议进行匿名只读访问。如果每个仓库都设有各自的段落,可以分别指定是否允许 Git 进程开放给用户匿名读取。比如允许通过 Git 协议访问 iphone_project,可以把下面两行加到 gitosis.conf
文件的末尾:
[repo iphone_project]
daemon = yes
在提交和推送完成后,运行中的 Git 守护进程就会响应来自 9418 端口对该项目的访问请求。
如果不考虑 Gitosis,单单起了 Git 守护进程的话,就必须到每一个允许匿名只读访问的仓库目录内,创建一个特殊名称的空文件作为标志:
$ cd /path/to/project.git
$ touch git-daemon-export-ok
该文件的存在,表明允许 Git 守护进程开放对该项目的匿名只读访问。
Gitosis 还能设定哪些项目允许放在 GitWeb 上显示。先打开 GitWeb 的配置文件 /etc/gitweb.conf
,添加以下四行:
$projects_list = "/home/git/gitosis/projects.list";
$projectroot = "/home/git/repositories";
$export_ok = "git-daemon-export-ok";
@git_base_url_list = ('git://gitserver');
接下来,只要配置各个项目在 Gitosis 中的 gitweb
参数,便能达成是否允许 GitWeb 用户浏览该项目。比如,要让 iphone_project 项目在 GitWeb 里出现,把 repo
的设定改成下面的样子:
[repo iphone_project]
daemon = yes
gitweb = yes
在提交并推送过之后,GitWeb 就会自动开始显示 iphone_project 项目的细节和历史。
http://git-scm.com/book/zh/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-Git-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B
相关推荐
1 起步 1 1 关于版本控制 1 2 Git 简史 1 3 Git 基础 1 4 安装 Git ...4 9 Git 守护进程 4 10 Git 托管服务 4 11 小结 5 分布式 Git 6 Git 工具 7 自定义 Git 8 Git 与其他系统 9 Git 内部原理
git-scm.com官方开放免费版权的电子书progit,有...4.5 Git 守护进程 4.6 Smart HTTP 4.7 GitWeb 4.8 GitLab 4.9 第三方托管的选择 4.10 总结 5. 分布式 Git 5.1 分布式工作流程 5.2 向一个项目贡献 5.3 维护项目 5.4
4 9 Git 守护进程 4 10 Git 托管服务 4 11 小结 5 分布式 Git 6 Git 工具 7 自定义 Git 8 Git 与其他系统 9 Git 内部原理 ">1 起步 1 1 关于版本控制 1 2 Git 简史 1 3 Git 基础 1 4 安装 Git 1 5 ...
Gogit 是 Gogs 的守护进程可视化客户端。 使用之前先下载好 Gogs,之后启动应用,配置 gogs.exe 的路径和端口。
lncli-web, 在 nodejs/Angular 中,编写了lnd守护进程的轻量级网络客户端 Lnd网络客户端安装要求nodejs/npm过程从 Lnd Web客户端git库获取源:git clone https://github.com/mably/lncli-web.git移动到新创建的目
洛尔lohr是一个 Git 镜像工具。我创建它是为了解决我遇到的一个简单问题:我在https://git.alarsyo.net托管我自己的 git 服务器,但想将我的公共项目镜像到 GitHub / GitLab,以用于备份和可见性目的。GitLab 有一个...
git-archive-守护进程 git-archive-daemon 是一个可扩展的高性能 HTTP API,用于服务 git 存储库的档案。 它利用git archive工具进行实际的归档生成。 特征 懒惰- 档案在需要时按需生成。 缓存- 从磁盘缓存提供对...
安装 $ git clone https://github.com/rohit-h/teletap && cd teletap && python setup.py install用法在此设计中,您需要注意五个基本元素/对象引用: Client : Teletap 对象,用于初始化 Telegram-cli 守护进程,...
git-etc信息简单的守护进程,它会在给定的目录中自动创建 git 存储库并在指定的时间间隔创建提交。 要启动 deamon,只需以 root 身份运行systemctl start git-etc 。执照GPLv3帮助信息git 等: Usage: git-etc [ -c ...
RabbitMQ-Worker 作为守护进程运行。 它消费和消化来自RabbitMQ的消息,然后将结果保存到RedisCluster,分布式锁采用RedLock算法。 目录 特征 Redis 作为数据存储 防止重复实例的共享内存锁 支持信号 可配置的工人...
LiFePO4wered-Pi, lifepo4wered/pi模块的访问库,命令行 工具和守护进程 LiFePO4wered-Pilifepo4wered/pi模块的访问库,命令行 工具和守护进程安装从全新 Raspbian Jessie映像( 。使用 2016-02-09 version测试) 开始...
Gogs 是一款开源的轻量级Git web服务,其特点是简单易用完档齐全、国际化做的相当不错。其主要功能如下: 1.提供Http 与ssh 两种协议访问源码服务 2.提供可WEB界面可查看修改源码代码 3.提供较完善的权限管理功能、...
Django 的测试守护程序。 基于 将尝试找到进行更改的应用程序并仅为该应用程序运行测试。 如果找不到它或影响整个项目的更改,则将运行所有测试。 它不会注意到来自其他应用程序的测试使用已更改的应用程序。 即...
任务守护进程 在后台运行 taks 的简单 PHP fork()ing 守护进程。 它在内部使用 Gearman,但不向用户公开。 安装 这个守护进程需要一个正在运行的 Gearman 服务器和以下 PHP 扩展: pcntl posix openssl 齿轮工 ...
yamhd-c-libuv 另一个最小的 http 守护进程。文档显示与代码混合的注释的。 详细标题注释形式的。 libuv API 规范和使用示例。构建说明克隆yamhd-c-libuv和 libuv 子模块并运行make : git clone --recursive ...
$ git clone git://github.com/joachifm/libmpd-haskell.git libmpd-haskell $ cd libmpd-haskell $ cabal install 最后: $ git clone git://github.com/joachifm/mpdfs.git mpdfs $ cd mpdfs $ cabal install ...
SPDIF Keep Alive 是 OS X 的守护进程,可防止光纤音频输出进入Hibernate状态。 通常,光学音频在 30 秒不活动后进入睡眠状态(因为没有播放声音)。 从睡眠中醒来后,开始播放的音频将被切断约 1 秒。 此守护程序...
一个使用 Python 的简单远程系统控制守护进程。 适用于 Windows/Linux/Mac。 ###Description 这是一个简单的远程控制守护进程。 您可以在服务器中发送命令,所有订阅同一主题的客户端都会立即运行该命令,然后将...
照片EazyPhoto 的守护进程要求去 v1.1如何构建 git clone git://github.com/sergeyfast/eazyphotod.gitcd eazyphotodexport GOPATH=`pwd`go get -fix eazyphotod modelgo build -o eazyphotod src/eazyphotod.go
QNFCd 是一个 C++/Qt 守护进程,它通过 D-Bus 公开 NFC 设备。 该项目处于 WIP 状态,现在正在寻找维护者。介绍QNFCd 是一个守护进程,它通过 libnfc 访问 NFC 设备和目标。 它提供 D-Bus 服务以获取设备列表、目标...