<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_4.9_Git_Daemon</id>
	<title>Pro Git 4.9 Git Daemon - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_4.9_Git_Daemon"/>
	<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_4.9_Git_Daemon&amp;action=history"/>
	<updated>2026-05-05T21:08:39Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_4.9_Git_Daemon&amp;diff=551&amp;oldid=prev</id>
		<title>imported&gt;Ray：​新頁面: 如果您的專案要提供公共、非授權的唯讀訪問，您會想要略過 HTTP 協議而使用 Git 協議。主因在於速度。Git 協定效率遠高於 HTTP，因而比 HTTP ...</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_4.9_Git_Daemon&amp;diff=551&amp;oldid=prev"/>
		<updated>2011-05-31T01:06:07Z</updated>

		<summary type="html">&lt;p&gt;新頁面: 如果您的專案要提供公共、非授權的唯讀訪問，您會想要略過 HTTP 協議而使用 Git 協議。主因在於速度。Git 協定效率遠高於 HTTP，因而比 HTTP ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;如果您的專案要提供公共、非授權的唯讀訪問，您會想要略過 HTTP 協議而使用 Git 協議。主因在於速度。Git 協定效率遠高於 HTTP，因而比 HTTP 協議更迅速，所以它能節省很多時間。&lt;br /&gt;
&lt;br /&gt;
重申一下，這一點只適用於非授權、唯讀的訪問。如果在防火牆之外的伺服器上，該服務的使用應該局限于公諸於世的專案。假如是在防火牆之內，它也可以用於具有大量參與人員或者主機（長期整合資源或編譯的伺服器）的唯讀訪問的專案，可以省去逐一添加 SSH 公開金鑰的麻煩。&lt;br /&gt;
&lt;br /&gt;
無論哪種情況，Git 協定的設定都相對簡單。基本上，只要以常駐程序(daemon)的形式運行該命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
git daemon --reuseaddr --base-path=/opt/git/ /opt/git/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--reuseaddr 使得服務無須等到舊的連接嘗試過期以後再重啟，--base-path 選項使得克隆專案的時候不用給出完整的路徑，而最後面的路徑告訴 Git 程序匯出倉庫的位置。假如有防火牆，則需要為該主機的 9418 埠打個允許通信的洞。&lt;br /&gt;
&lt;br /&gt;
有幾個不同的辦法可以讓該程序長期駐留，取決於不同的作業系統。在 Ubuntu 主機上，可以用 Upstart 腳本來完成。於是，在下面這個檔&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
/etc/event.d/local-git-daemon&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
加入該腳本內容：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
start on startup&lt;br /&gt;
stop on shutdown&lt;br /&gt;
exec /usr/bin/git daemon \&lt;br /&gt;
    --user=git --group=git \&lt;br /&gt;
    --reuseaddr \&lt;br /&gt;
    --base-path=/opt/git/ \&lt;br /&gt;
    /opt/git/&lt;br /&gt;
respawn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
出於安全考慮，強烈建議用一個對倉庫只有讀取許可權的使用者身份來運行該進程——只需要簡單的新創建一個 git-ro 用戶（譯注：並將它對倉庫的許可權設為唯讀），用它來運行進程。為了簡化，下面我們將依舊使用運行了 Gitosis 的 ‘git’ 用戶。&lt;br /&gt;
&lt;br /&gt;
重啟主機的時候，Git 進程會自行啟動，一旦關閉了也會自行重啟。想要不重新啟動機器就開啟這個程序，可以執行這個命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
initctl start local-git-daemon&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在其他系統上，或許應該使用 xinetd，sysinit 的一個腳本，或者其他的——只要能讓那個命令進程化和可監控。&lt;br /&gt;
&lt;br /&gt;
然後，必須告訴 Gitosis 服務那些倉庫允許基於 Git 協議的非授權訪問。如果為每一個倉庫設立了自己的區段(section)，就可以指定想讓 Git 進程給予可讀許可權的倉庫。假如要允許通過 Git 協議訪問前面的 iphone 專案，可以把如下內容加到 gitosis.conf 文件的結尾：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[repo iphone_project]&lt;br /&gt;
daemon = yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在提交和推送完成以後，運行中的進程將開始回應所有能訪問主機 9418 埠的人發來的項目請求。&lt;br /&gt;
&lt;br /&gt;
假如不想使用 Gitosis，而又想架設一個 Git daemon，則必須為每一個想使用 Git daemon 的專案執行如下命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /path/to/project.git&lt;br /&gt;
$ touch git-daemon-export-ok&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
該文件（譯注：指空檔 git-deamon-export-ok）告訴 Git 允許對該專案的非授權訪問。&lt;br /&gt;
&lt;br /&gt;
Gitosis 還能控制 GitWeb 顯示哪些專案。首先，在 /etc/gitweb.conf 添加如下內容：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$projects_list = &amp;quot;/home/git/gitosis/projects.list&amp;quot;;&lt;br /&gt;
$projectroot = &amp;quot;/home/git/repositories&amp;quot;;&lt;br /&gt;
$export_ok = &amp;quot;git-daemon-export-ok&amp;quot;;&lt;br /&gt;
@git_base_url_list = ('git://gitserver');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
通過在 Gitosis 的設置檔裡添加或刪除 gitweb 設定，就能控制 GitWeb 允許用戶流覽哪些專案。比如，我們想讓 iphone 專案 在 GitWeb 裡出現，把 repo 的設定改成下面的樣子：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[repo iphone_project]&lt;br /&gt;
daemon = yes&lt;br /&gt;
gitweb = yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果現在提交和推送該專案，GitWeb 會自動開始展示我們的 iphone 專案。&lt;/div&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
</feed>