匿名的讀取權限該怎么實現呢?也許除了內部私有的項目之外,你還需要托管一些開源項目。或者因為要用一些自動化的服務器來進行編譯,或者有一些經常變化的服務器群組,而又不想整天生成新的 SSH 密鑰 — 總之,你需要簡單的匿名讀取權限。
或許對小型的配置來說最簡單的辦法就是運行一個靜態 web 服務,把它的根目錄設定為 Git 倉庫所在的位置,然后開啟本章第一節提到的 post-update 掛鉤。這里繼續使用之前的例子。假設倉庫處于 `/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` 的請求發送到這臺主機:
~~~
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 守護進程,不過這將要求該進程作為后臺進程常駐 — 接下來的這一節就要討論這方面的細節。
- 1. 起步
- 1.1 關于版本控制
- 1.2 Git 簡史
- 1.3 Git 基礎
- 1.4 安裝 Git
- 1.5 初次運行 Git 前的配置
- 1.6 獲取幫助
- 1.7 小結
- 2. Git基礎
- 2.1 取得項目的 Git 倉庫
- 2.2 記錄每次更新到倉庫
- 2.3 查看提交歷史
- 2.4 撤消操作
- 2.5 遠程倉庫的使用
- 2.6 打標簽
- 2.7 技巧和竅門
- 2.8 小結
- 3. Git分支
- 3.1 何謂分支
- 3.2 分支的新建與合并
- 3.3 分支的管理
- 3.4 利用分支進行開發的工作流程
- 3.5 遠程分支
- 3.6 分支的衍合
- 3.7 小結
- 4. 服務器上的Git
- 4.1 協議
- 4.2 在服務器上部署 Git
- 4.3 生成 SSH 公鑰
- 4.4 架設服務器
- 4.5 公共訪問
- 4.6 GitWeb
- 4.7 Gitosis
- 4.8 Gitolite
- 4.9 Git 守護進程
- 4.10 Git 托管服務
- 4.11 小結
- 5. 分布式Git
- 5.1 分布式工作流程
- 5.2 為項目作貢獻
- 5.3 項目的管理
- 5.4 小結
- 6. Git工具
- 6.1 修訂版本(Revision)選擇
- 6.2 交互式暫存
- 6.3 儲藏(Stashing)
- 6.4 重寫歷史
- 6.5 使用 Git 調試
- 6.6 子模塊
- 6.7 子樹合并
- 6.8 總結
- 7. 自定義Git
- 7.1 配置 Git
- 7.2 Git屬性
- 7.3 Git掛鉤
- 7.4 Git 強制策略實例
- 7.5 總結
- 8. Git與其他系統
- 8.1 Git 與 Subversion
- 8.2 遷移到 Git
- 8.3 總結
- 9. Git 內部原理
- 9.2 Git 對象
- 9.3 Git References
- 9.4 Packfiles
- 9.5 The Refspec
- 9.6 傳輸協議
- 9.7 維護及數據恢復
- 9.8 總結
- 9.1 底層命令 (Plumbing) 和高層命令 (Porcelain)