开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

176.5. git-daemon 服务器

简介:
+关注继续查看

176.5.1. git-daemon - A really simple server for git repositories

在/home/gitroot/ 上运行 git 守护进程

$ cd /home/gitroot
$ mkdir test.git
$ cd test.git
$ git --bare init --shared
Initialized empty shared Git repository in /home/gitroot/test.git/
		
		
git daemon --verbose --export-all --base-path=/home/gitroot --enable=receive-pack --reuseaddr
		
		

允许push,否则该仓库只能clone/pull

sudo git daemon --verbose --export-all --base-path=/home/gitroot --enable=upload-pack --enable=upload-archive --enable=receive-pack
		

或者增加配置项

$ git config daemon.receivepack true
$ git config --file config receive.denyCurrentBranch ignore
		

176.5.2. git-daemon-sysvinit

for a read-only repo:

		
$ sudo apt-get install git-daemon-sysvinit


$ dpkg -l git-daemon-sysvinit
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                   Version                  Architecture             Description
+++-======================================-========================-========================-==================================================================================
ii  git-daemon-sysvinit                    1:1.7.10.4-1ubuntu1      all                      fast, scalable, distributed revision control system (git-daemon service)


$ dpkg -L git-daemon-sysvinit
/.
/usr
/usr/share
/usr/share/git-core
/usr/share/git-core/sysvinit
/usr/share/git-core/sysvinit/sentinel
/usr/share/doc
/usr/share/doc/git-daemon-sysvinit
/usr/share/doc/git-daemon-sysvinit/copyright
/usr/share/doc/git-daemon-sysvinit/README.Debian
/etc
/etc/default
/etc/default/git-daemon
/etc/init.d
/etc/init.d/git-daemon
/usr/share/doc/git-daemon-sysvinit/changelog.Debian.gz
		
		

配置 /etc/default/git-daemon 文件

176.5.3. inet.conf / xinetd 方式启动

过程 176.2. git-daemon

  1. /etc/shells

    /etc/shells 最后一行添加 '/usr/bin/git-shell'

    $ grep git /etc/shells
    /usr/bin/git-shell
    				
  2. add new user 'git' and 'gitroot' for git

    you need to assign shell with /usr/bin/git-shell

    $ sudo adduser git --shell /usr/bin/git-shell
    $ sudo adduser gitroot --ingroup git --shell /bin/bash
    				

    /etc/passwd

    $ grep git /etc/passwd
    git:x:1001:1002:,,,:/home/git:/usr/bin/git-shell
    gitroot:x:1002:1002:,,,:/home/gitroot:/bin/bash
    				
  3. /etc/services

    $ grep 9418 /etc/services
    git             9418/tcp                        # Git Version Control System
    				
  4. /etc/inet.conf

    $ grep git /etc/inet.conf
    git     stream  tcp     nowait  nobody \
      /usr/bin/git-daemon git-daemon --inetd --syslog --export-all /home/gitroot
    				

    reload inetd

    $ sudo pkill -HUP inetd
    				
  5. xinetd

    目前的Linux逐渐使用xinetd.d替代inet.conf,如Redhat系列已经不再使用inet.conf, Ubuntu系列发行版已经不预装inet与xinetd

    $ apt-cache search xinetd
    globus-gfork-progs - Globus Toolkit - GFork Programs
    rlinetd - gruesomely over-featured inetd replacement
    update-inetd - inetd configuration file updater
    xinetd - replacement for inetd with many enhancements
    
    $ sudo apt-get install xinetd
    				

    /etc/xinetd.d/

    $ cat /etc/xinetd.d/git
    # default: off
    # description: The git server offers access to git repositories
    service git
    {
            disable 		= no
            type            = UNLISTED
            port            = 9418
            socket_type     = stream
            protocol 		= tcp
            wait            = no
            user            = gitroot
            server          = /usr/bin/git
            server_args     = daemon --inetd --export-all --enable=receive-pack --reuseaddr --base-path=/home/gitroot
            log_on_failure  += USERID
    }
    				

    reload xinitd

    $ sudo /etc/init.d/xinetd reload
     * Reloading internet superserver configuration xinetd                                       [ OK ]
    				

176.5.4. git-daemon-run

$ sudo apt-get install git-daemon-run
		

安装后会创建下面两个用户

$ cat /etc/passwd | grep git
gitlog:x:117:65534::/nonexistent:/bin/false
gitdaemon:x:118:65534::/nonexistent:/bin/false
		

git-daemon-run 包携带的文件

$ dpkg -L git-daemon-run
/.
/etc
/etc/sv
/etc/sv/git-daemon
/etc/sv/git-daemon/run
/etc/sv/git-daemon/log
/etc/sv/git-daemon/log/run
/usr
/usr/share
/usr/share/doc
/usr/share/doc/git-daemon-run
/usr/share/doc/git-daemon-run/changelog.gz
/usr/share/doc/git-daemon-run/changelog.Debian.gz
/usr/share/doc/git-daemon-run/README.Debian
/usr/share/doc/git-daemon-run/copyright
		

同时创建下面配置文件

$ find /etc/sv/git-daemon/
/etc/sv/git-daemon/
/etc/sv/git-daemon/run
/etc/sv/git-daemon/supervise
/etc/sv/git-daemon/log
/etc/sv/git-daemon/log/run
/etc/sv/git-daemon/log/supervise
		

编辑/etc/sv/git-daemon/run配置

		
$ sudo vim /etc/sv/git-daemon/run

#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
  "$(git --exec-path)"/git-daemon --verbose --reuseaddr \
    --base-path=/var/cache /var/cache/git
		
		

git-daemon --verbose --reuseaddr \
    --base-path=/var/cache /var/cache/git

改为

git-daemon --verbose --reuseaddr \
	--enable=receive-pack --export-all --base-path=/opt/git
		
[提示] 提示

* 我加上了一个--export-all 使用该选项后,在git仓库中就不必创建git-daemon-export-ok文件。

其他选项--enable=upload-pack --enable=upload-archive --enable=receive-pack

/etc/services 文件中加入

# Local services
git             9418/tcp                        # Git Version Control System
		

确认已经加入

$ grep 9418 /etc/services
		

启动git-daemon

$ sudo sv stop git-daemon

or

$ sudo runsv git-daemon
runsv git-daemon: fatal: unable to change to directory: file does not exist
		

扫描git端口,确认git-daemon已经启动

$ nmap localhost

Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-31 10:45 CST
Warning: Hostname localhost resolves to 2 IPs. Using 127.0.0.1.
Interesting ports on localhost (127.0.0.1):
Not shown: 989 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
1723/tcp open  pptp
3128/tcp open  squid-http
3306/tcp open  mysql
9418/tcp open  git
		

176.5.5. Testing

		
$ sudo mkdir -p /opt/git/example.git
$ cd /opt/git/example.git
$ git init
$ sudo vim example.git/.git/config
[receive]
denyCurrentBranch = ignore

$ sudo chown gitdaemon -R /opt/git/*
$ touch git-daemon-export-ok
		
		

.git/config 文件应该是下面这样

$ cat example.git/.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true

[receive]
denyCurrentBranch = ignore
		

git-clone git://localhost/example.git

		
neo@deployment:/tmp$ git clone git://localhost/example.git example.git
Cloning into example.git...
warning: You appear to have cloned an empty repository.
neo@deployment:/tmp$ cd example.git/
neo@deployment:/tmp/example.git$ echo helloworld > hello.txt
neo@deployment:/tmp/example.git$ git add hello.txt
neo@deployment:/tmp/example.git$ git commit -m 'Initial commit'
[master (root-commit) 65a0f83] Initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt
		
		

我们添加了一些文件 push 到服务器

$ git push origin master
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 214 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git://localhost/example.git
 * [new branch]      master -> master
		

然后再git clone,可以看到文件数目

		
$ git-clone git://localhost/example.git
Cloning into example...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
		
		




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
三招教你轻松扩展 git bash 命令(中)(二)
在上一篇文章中我们介绍了第一种方式实现轻松扩展 GitBash 命令,首先简单回顾一下主要知识. GitBash 命令行工具是 Windows 电脑安装 Git 时默认集成的终端工具,与此同时还有双胞胎兄弟 GitGUI 图形化工具.
106 0
Git常用命令及方法大全(2)
Git常用命令及方法大全(2)
201 0
git命令使用
git命令使用
2976 0
使用Git命令从Github下载代码仓库
1.使用终端命令进入文件夹,命令:cd f:/code/git 2.初始化版本仓库 git init,会在文件夹下创建一个隐藏的.git文件 3.复制代码到本地 git clone url,“url”为源码所在地址 4.此时文件夹下就成功的下载了源码
6122 0
git diff 命令 输出解读
# 数据准备 $ vi rainbow.txt $ cat rainbow.txt This is my rainbow. Everybody has his own rainbow.
1526 0
Git撤销修改、回退版本相关命令
取消对文件的修改、还原到最近的版本、废弃本地做的修改。 git checkout file.txt # 如果是当前项目的所有修改过的文件 git checkout . 取消已经暂存的文件,即撤销先前"git add"的操作 git reset HEAD file.txt 修改最后一次提交。
1334 0
Git命令使用总结
1.在GitHub上创建了一个新项目,如何将本地的一个工程上传上去 1) copy github项目地址 2) 在android studio中打开terminal命令行,执行命令将本项目所有代码添加 git add * 3)执行命令提交 git co...
1184 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载