Git 公共訪問

2018-09-27 15:41 更新

匿名的讀取權(quán)限該怎么實現(xiàn)呢?也許除了內(nèi)部私有的項目之外,你還需要托管一些開源項目?;蛘咭驗橐靡恍┳詣踊姆?wù)器來進(jìn)行編譯,或者有一些經(jīng)常變化的服務(wù)器群組,而又不想整天生成新的 SSH 密鑰 — 總之,你需要簡單的匿名讀取權(quán)限。

或許對小型的配置來說最簡單的辦法就是運(yùn)行一個靜態(tài) web 服務(wù),把它的根目錄設(shè)定為 Git 倉庫所在的位置,然后開啟本章第一節(jié)提到的 post-update 掛鉤。這里繼續(xù)使用之前的例子。假設(shè)倉庫處于 /opt/git 目錄,主機(jī)上運(yùn)行著 Apache 服務(wù)。重申一下,任何 web 服務(wù)程序都可以達(dá)到相同效果;作為范例,我們將用一些基本的 Apache 設(shè)定來展示大體需要的步驟。

首先,開啟掛鉤:

$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
post-update 掛鉤是做什么的呢?其內(nèi)容大致如下:

$ cat .git/hooks/post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
#

exec git-update-server-info

意思是當(dāng)通過 SSH 向服務(wù)器推送時,Git 將運(yùn)行這個 git-update-server-info命令來更新匿名 HTTP 訪問獲取數(shù)據(jù)時所需要的文件。

接下來,在 Apache 配置文件中添加一個 VirtualHost 條目,把文檔根目錄設(shè)為 Git 項目所在的根目錄。這里我們假定 DNS 服務(wù)已經(jīng)配置好,會把對 .gitserver 的請求發(fā)送到這臺主機(jī):

VirtualHost *:80>
    ServerName git.gitserver
    DocumentRoot /opt/git
    <Directory /opt/git/>
        Order allow, deny
        allow from all
    </Directory>
</VirtualHost>

另外,需要把 /opt/git目錄的 Unix 用戶組設(shè)定為 www-data ,這樣 web 服務(wù)才可以讀取倉庫內(nèi)容,因為運(yùn)行 CGI 腳本的 Apache 實例進(jìn)程默認(rèn)就是以該用戶的身份起來的:

$ chgrp -R www-data /opt/git
重啟 Apache 之后,就可以通過項目的 URL 來克隆該目錄下的倉庫了。

$ git clone http://git.gitserver/project.git
這一招可以讓你在幾分鐘內(nèi)為相當(dāng)數(shù)量的用戶架設(shè)好基于 HTTP 的讀取權(quán)限。另一個提供非授權(quán)訪問的簡單方法是開啟一個 Git 守護(hù)進(jìn)程,不過這將要求該進(jìn)程作為后臺進(jìn)程常駐 — 接下來的這一節(jié)就要討論這方面的細(xì)節(jié)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號