Skip to content

Commit 0c9ff6b

Browse files
committed
Merge pull request #252 from networm/sync_04-git-server
Sync 04-git-server
2 parents 0ebe0b7 + 2998808 commit 0c9ff6b

File tree

5 files changed

+38
-18
lines changed

5 files changed

+38
-18
lines changed

book/04-git-server/sections/git-daemon.asc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
=== Git 守护进程
22

33
(((serving repositories, git protocol)))
4-
接下来我们将通过 ``Git'' 协议建立一个基于守护进程的仓库。对于快速且无需授权的 Git 数据访问,这是一个理想之选。请注意,因为其不包含授权服务,任何通过该协议管理的内容将在其网络上公开。
4+
接下来我们将通过 ``Git'' 协议建立一个基于守护进程的仓库。
5+
对于快速且无需授权的 Git 数据访问,这是一个理想之选。
6+
请注意,因为其不包含授权服务,任何通过该协议管理的内容将在其网络上公开。
57

68
如果运行在防火墙之外的服务器上,它应该只对那些公开的只读项目服务。
79
如果运行在防火墙之内的服务器上,它可用于支撑大量参与人员或自动系统(用于持续集成或编译的主机)只读访问的项目,这样可以省去逐一配置 SSH 公钥的麻烦。
@@ -41,7 +43,7 @@ respawn
4143
----
4244

4345
出于安全考虑,强烈建议使用一个对仓库拥有只读权限的用户身份来运行该守护进程 - 你可以创建一个新用户 'git-ro' 并且以该用户身份来运行守护进程。
44-
为简便起见,我们将像 Gitosis 一样,同样使用 'git' 用户来运行它。
46+
为简便起见,我们将像 `git-shell` 一样,同样使用 'git' 用户来运行它。
4547

4648
当你重启机器时,你的 Git 守护进程将会自动启动,并且如果进程被意外结束它会自动重新运行。
4749
为了在不重启的情况下直接运行,你可以运行以下命令:
@@ -53,12 +55,13 @@ initctl start local-git-daemon
5355

5456
在其他系统中,你可以使用 `sysvinit` 系统中的 `xinetd` 脚本,或者另外的方式来实现 - 只要你能够将其命令守护进程化并实现监控。
5557

56-
接下来,你需要告诉 Git 哪些仓库允许基于服务器的无授权访问。你可以在每个仓库下创建一个名为 `git-daemon-export-ok` 的文件来实现。
58+
接下来,你需要告诉 Git 哪些仓库允许基于服务器的无授权访问。
59+
你可以在每个仓库下创建一个名为 `git-daemon-export-ok` 的文件来实现。
5760

5861
[source,console]
5962
----
6063
$ cd /path/to/project.git
6164
$ touch git-daemon-export-ok
6265
----
6366

64-
该文件将允许 Git 提供无需授权的项目访问服务。
67+
该文件将允许 Git 提供无需授权的项目访问服务。

book/04-git-server/sections/git-on-a-server.asc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ $ git init --bare --shared
7070
你已经准备好了一切,无需更多。
7171

7272
下面的几节中,你会了解如何扩展到更复杂的设定。
73-
这些内容包含如何避免为每一个用户建立一个账户,给仓库添加公共读取权限,架设网页界面,使用 Gitosis 工具等等
73+
这些内容包含如何避免为每一个用户建立一个账户,给仓库添加公共读取权限,架设网页界面等等
7474
然而,请记住这一点,如果只是和几个人在一个私有项目上合作的话,__仅仅__ 是一个 SSH 服务器和裸仓库就足够了。
7575

7676
==== 小型安装

book/04-git-server/sections/gitlab.asc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,5 @@ web 用户界面提供了几个有用的获取版本库信息的网页。
127127
每一个合并请求都允许在提出改变的行进行讨论(它支持一个轻量级的代码审查),也允许对一个总体性话题进行讨论。
128128
两者都可以被分配给用户,或者组织到 milestones(里程碑) 界面。
129129

130-
这个部分主要聚焦于在 GitLab 中与 Git 相关的部分,但是 GitLab 是一个相当成熟的系统,它提供了许多其他产品来帮助你协同工作。
131-
这包括项目的 wiki 页面,讨论 ``墙'',以及系统维护工具。
130+
这个部分主要聚焦于在 GitLab 中与 Git 相关的特性,但是 GitLab 作为一个成熟的系统,它提供了许多其他产品来帮助你协同工作,例如项目 wiki 与系统维护工具。
132131
GitLab 的一个优点在于,服务器设置和运行以后,你将很少需要调整配置文件或通过 SSH 连接服务器;绝大多数的管理和日常使用都可以在浏览器界面中完成。

book/04-git-server/sections/protocols.asc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ $ git clone file:///opt/git/project.git
3333
在此我们将使用普通路径,因为这样通常更快。
3434

3535
要增加一个本地版本库到现有的 Git 项目,可以执行如下的命令:
36+
3637
[source,console]
3738
----
3839
$ git remote add local_proj /opt/git/project.git
@@ -57,7 +58,10 @@ $ git remote add local_proj /opt/git/project.git
5758

5859
值得一提的是,如果你使用的是类似于共享挂载的文件系统时,这个方法不一定是最快的。
5960
访问本地版本库的速度与你访问数据的速度是一样的。
60-
在同一个服务器上,如果允许Git访问本地硬盘,一般的通过 NFS 访问版本库要比通过 SSH 访问慢。
61+
在同一个服务器上,如果允许 Git 访问本地硬盘,一般的通过 NFS 访问版本库要比通过 SSH 访问慢。
62+
63+
最终,这个协议并不保护仓库避免意外的损坏。
64+
每一个用户都有“远程”目录的完整 shell 权限,没有方法可以阻止他们修改或删除 Git 内部文件和损坏仓库。
6165

6266
==== HTTP 协议
6367

@@ -73,7 +77,10 @@ Git 1.6.6 版本引入了一种新的、更智能的协议,让 Git 可以像
7377
(((protocols, smart HTTP)))
7478
“智能” HTTP 协议的运行方式和 SSH 及 Git 协议类似,只是运行在标准的 HTTP/S 端口上并且可以使用各种 HTTP 验证机制,这意味着使用起来会比 SSH 协议简单的多,比如可以使用 HTTP 协议的用户名/密码的基础授权,免去设置 SSH 公钥。
7579

76-
智能 HTTP 协议或许已经是最流行的使用 Git 的方式了,它即支持像 `git://` 协议一样设置匿名服务,也可以像 SSH 协议一样提供传输时的授权和加密。而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的 URL。如果你要推送到一个需要授权的服务器上(一般来讲都需要),服务器会提示你输入用户名和密码,从服务器获取数据时也一样。
80+
智能 HTTP 协议或许已经是最流行的使用 Git 的方式了,它即支持像 `git://` 协议一样设置匿名服务,也可以像 SSH 协议一样提供传输时的授权和加密。
81+
而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的 URL。
82+
如果你要推送到一个需要授权的服务器上(一般来讲都需要),服务器会提示你输入用户名和密码。
83+
从服务器获取数据时也一样。
7784

7885
事实上,类似 GitHub 的服务,你在网页上看到的 URL (比如, `https://github.com/schacon/simplegit[]`),和你在克隆、推送(如果你有权限)时使用的是一样的。
7986

@@ -108,7 +115,8 @@ $ git clone https://example.com/gitproject.git
108115
这里我们用了 Apache 里设置了常用的路径 `/var/www/htdocs`,不过你可以使用任何静态 web 服务器 —— 只需要把裸版本库放到正确的目录下就可以。
109116
Git 的数据是以基本的静态文件形式提供的(详情见 <<_git_internals>>)。
110117

111-
通常的,会在可以提供读/写的智能 HTTP 服务和简单的只读的哑 HTTP 服务之间选一个。极少会将二者混跑提供服务。
118+
通常的,会在可以提供读/写的智能 HTTP 服务和简单的只读的哑 HTTP 服务之间选一个。
119+
极少会将二者混合提供服务。
112120

113121
===== 优点
114122

@@ -128,7 +136,9 @@ Git 的数据是以基本的静态文件形式提供的(详情见 <<_git_inter
128136
在一些服务器上,架设 HTTP/S 协议的服务端会比 SSH 协议的棘手一些。
129137
除了这一点,用其他协议提供 Git 服务与 “智能” HTTP 协议相比就几乎没有优势了。
130138

131-
如果你在 HTTP 上使用需授权的推送,管理凭证会比使用 SSH 密钥认证麻烦一些。然而,你可以选择使用凭证存储工具,比如 OSX 的 Keychain 或者 Windows 的凭证管理器。参考 <<_credential_caching>> 如何安全的保存 HTTP 密码。
139+
如果你在 HTTP 上使用需授权的推送,管理凭证会比使用 SSH 密钥认证麻烦一些。
140+
然而,你可以选择使用凭证存储工具,比如 OSX 的 Keychain 或者 Windows 的凭证管理器。
141+
参考 <<_credential_caching>> 如何安全地保存 HTTP 密码。
132142

133143
==== SSH 协议
134144

book/04-git-server/sections/smart-http.asc

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
(((serving repositories, HTTP)))
44
我们一般通过 SSH 进行授权访问,通过 git:// 进行无授权访问,但是还有一种协议可以同时实现以上两种方式的访问。
5-
设置 Smart HTTP 一般只需要在服务器上启用一个 Git 自带的名为 `git-http-backend` 的 CGI 脚本。((git commands, "http-backend"))
5+
设置 Smart HTTP 一般只需要在服务器上启用一个 Git 自带的名为 `git-http-backend` 的 CGI 脚本。(((git commands, "http-backend")))
66
该 CGI 脚本将会读取由 `git fetch``git push` 命令向 HTTP URL 发送的请求路径和头部信息,来判断该客户端是否支持 HTTP 通信(不低于 1.6.6 版本的客户端支持此特性)。
77
如果 CGI 发现该客户端支持智能(Smart)模式,它将会以智能模式与它进行通信,否则它将会回落到哑(Dumb)模式下(因此它可以对某些老的客户端实现向下兼容)。
88

9-
在完成以上简单的安装步骤后,我们将用 Apache 来作为 CGI 服务器。如果你没有安装 Apache,你可以在 Linux 环境下执行如下或类似的命令来安装:(((Apache)))
9+
在完成以上简单的安装步骤后,
10+
我们将用 Apache 来作为 CGI 服务器。
11+
如果你没有安装 Apache,你可以在 Linux 环境下执行如下或类似的命令来安装:(((Apache)))
1012

1113
[source,console]
1214
----
@@ -16,13 +18,13 @@ $ a2enmod cgi alias env
1618

1719
该操作将会启用 `mod_cgi``mod_alias`, 和 `mod_env` 等 Apache 模块, 这些模块都是使该功能正常工作所必须的。
1820

19-
接下来我们要向 Apache 配置文件添加一些内容,来让 `git http-backend` 作为 Web 服务器对 `/git` 路径请求的处理器。
21+
接下来我们要向 Apache 配置文件添加一些内容,来让 `git-http-backend` 作为 Web 服务器对 `/git` 路径请求的处理器。
2022

2123
[source,console]
2224
----
2325
SetEnv GIT_PROJECT_ROOT /opt/git
2426
SetEnv GIT_HTTP_EXPORT_ALL
25-
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
27+
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
2628
----
2729

2830
如果留空 `GIT_HTTP_EXPORT_ALL` 这个环境变量,Git 将只对无授权客户端提供带 `git-daemon-export-ok` 文件的版本库,就像 Git 守护进程一样。
@@ -51,16 +53,22 @@ ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
5153
</LocationMatch>
5254
----
5355

54-
这需要你创建一个包含所有合法用户密码的 `.htaccess` 文件。以下是一个添加 ``schacon'' 用户到此文件的例子:
56+
这需要你创建一个包含所有合法用户密码的 `.htaccess` 文件。
57+
以下是一个添加 ``schacon'' 用户到此文件的例子:
5558

5659
[source,console]
5760
----
5861
$ htdigest -c /opt/git/.htpasswd "Git Access" schacon
5962
----
6063

61-
你可以通过许多方式添加 Apache 授权用户,选择使用其中一种方式即可。以上仅仅只是我们可以找到的最简单的一个例子。如果愿意的话,你也可以通过 SSL 运行它,以保证所有数据是在加密状态下进行传输的。
64+
你可以通过许多方式添加 Apache 授权用户,选择使用其中一种方式即可。
65+
以上仅仅只是我们可以找到的最简单的一个例子。
66+
如果愿意的话,你也可以通过 SSL 运行它,以保证所有数据是在加密状态下进行传输的。
6267

63-
我们不想深入去讲解 Apache 配置文件,因为你可能会使用不同的 Web 服务器,或者可能有不同的授权需求。它的主要原理是使用一个 Git 附带的,名为 `git http-backend` 的 CGI。它被引用来处理协商通过 HTTP 发送和接收的数据。它本身并不包含任何授权功能,但是授权功能可以在 Web 服务器层引用它时被轻松实现。你可以在任何所有可以处理 CGI 的 Web 服务器上办到这点,所以随便挑一个你最熟悉的 Web 服务器试手吧。
68+
我们不想深入去讲解 Apache 配置文件,因为你可能会使用不同的 Web 服务器,或者可能有不同的授权需求。
69+
它的主要原理是使用一个 Git 附带的,名为 `git-http-backend` 的 CGI。它被引用来处理协商通过 HTTP 发送和接收的数据。
70+
它本身并不包含任何授权功能,但是授权功能可以在 Web 服务器层引用它时被轻松实现。
71+
你可以在任何所有可以处理 CGI 的 Web 服务器上办到这点,所以随便挑一个你最熟悉的 Web 服务器试手吧。
6472

6573
[NOTE]
6674
====

0 commit comments

Comments
 (0)