公共訪問

2018-07-10 17:12 更新

公共訪問

匿名的讀取權限該怎么實現呢?也許除了內部私有的項目之外,你還需要托管一些開源項目?;蛘咭驗橐靡恍┳詣踊姆掌鱽磉M行編譯,或者有一些經常變化的服務器群組,而又不想整天生成新的 SSH 密鑰 — 總之,你需要簡單的匿名讀取權限。

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

首先,開啟掛鉤:

$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update

post-update 掛鉤是做什么的呢?其內容大致如下:

$ 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

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

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

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

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

$ chgrp -R www-data /opt/git

重啟 Apache 之后,就可以通過項目的 URL 來克隆該目錄下的倉庫了。

$ git clone http://git.gitserver/project.git

這一招可以讓你在幾分鐘內為相當數量的用戶架設好基于 HTTP 的讀取權限。另一個提供非授權訪問的簡單方法是開啟一個 Git 守護進程,不過這將要求該進程作為后臺進程常駐 — 接下來的這一節(jié)就要討論這方面的細節(jié)。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號