Skip to content
This repository has been archived by the owner on May 2, 2019. It is now read-only.

Commit

Permalink
reviewed chapter 4; need translate the new section of Gitolite
Browse files Browse the repository at this point in the history
  • Loading branch information
chunzi committed Jun 29, 2011
1 parent 3fe472a commit d1e4ee1
Showing 1 changed file with 56 additions and 59 deletions.
115 changes: 56 additions & 59 deletions zh/04-git-server/01-chapter4.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -746,144 +746,141 @@ Gitosis 还能设定哪些项目允许放在 GitWeb 上显示。先打开 GitWeb

## Git 托管服务 ##

如果不想经历自己架设 Git 服务器的麻烦,网络上有几个专业的仓库托管服务可供选择。这样做有几大优点:托管账户的建立通常比较省时,方便项目的启动,而且不涉及服务其的维护和监控。即使内部创建并运行了自己的服务器,为开源的代码使用一个公共托管站点还是有好处——让开源社区更方便的找到该项目并给予帮助
如果不想经历自己架设 Git 服务器的麻烦,网络上有几个专业的仓库托管服务可供选择。这样做有几大优点:托管账户的建立通常比较省时,方便项目的启动,而且不涉及服务器的维护和监控。即使内部创建并运行着自己的服务器,同时为开源项目提供一个公共托管站点还是有好处的 — 让开源社区更方便地找到该项目,并给予帮助

目前,可供选择的托管服务数量繁多,各有利弊。在 Git 官方 wiki 上的 Githosting 页面有一个持续更新的托管服务列表
目前,可供选择的托管服务数量繁多,各有利弊。在 Git 官方 wiki 上的 Githosting 页面有一个最新的托管服务列表

http://git.or.cz/gitwiki/GitHosting

由于本书无法全部一一介绍它们,而本人(译注:指本书作者 Scott Chacon )刚好在其中之一工作,我们将在这一节介绍一下在 GitHub 建立账户和开启新项目的过程。为你提供一个使用托管服务的大致印象
由于本书无法全部一一介绍,而本人(译注:指本书作者 Scott Chacon。)刚好在其中一家公司工作,所以接下来我们将会介绍如何在 GitHub 上建立新账户并启动项目。至于其他托管服务大体也是这么一个过程,基本的想法都是差不多的

GitHub 是到目前为止最大的开源 Git 托管服务,并且是少数同时提供公共托管和私人托管服务的站点之一,所以你可以在一个站点同时保存开源和商业代码。事实上,本书正是私下使用 GitHub 合写的。(译注:而本书的翻译也是在 GitHub 上进行公共合作的)。
GitHub 是目前为止最大的开源 Git 托管服务,并且还是少数同时提供公共代码和私有代码托管服务的站点之一,所以你可以在上面同时保存开源和商业代码。事实上,本书就是放在 GitHub 上合作编著的。(译注:本书的翻译也是放在 GitHub 上广泛协作的。)

### GitHub ###

GitHub 和大多数的代码托管站点在处理项目命名空间的方式上略有不同。GitHub 的设计更侧重于用户,而不是而不是全部基于项目。意谓本人在 GitHub 上托管一个 `grit` 项目的话,它将不会出现在 `github.com/grit`而是在 `github.com/shacon/grit` (译注:作者在 GitHub 上的用户名是 shacon)。不存在所谓某个项目的官方版本,所以假如第一作者放弃了某个项目,它可以无缝转移到其它用户的旗下
GitHub 和大多数的代码托管站点在处理项目命名空间的方式上略有不同。GitHub 的设计更侧重于用户,而不是完全基于项目。也就是说,如果我在 GitHub 上托管一个名为 `grit` 的项目的话,它的地址不会是 `github.com/grit`而是按在用户底下 `github.com/shacon/grit` (译注:本书作者 Scott Chacon 在 GitHub 上的用户名是 `shacon`)。不存在所谓某个项目的官方版本,所以假如第一作者放弃了某个项目,它可以无缝转移到其它用户的名下

GitHub 同时也是一个向使用私有仓库的用户收取费用的商业公司,不过所有人都可以快捷的得到一个免费账户并且在上面托管任意多的开源项目。我们将快速介绍一下该过程
GitHub 同时也是一个向使用私有仓库的用户收取费用的商业公司,但任何人都可以方便快捷地申请到一个免费账户,并在上面托管数量不限的开源项目。接下来我们快速介绍一下 GitHub 的基本使用

### 建立账户 ###
### 建立新账户 ###

第一个必要必要步骤是注册一个免费的账户。访问 Pricing and Signup (价格与注册)页面 `http://github.com/plans` 并点击 Free acount (免费账户)的 "Sign Up(注册)" 按钮(见图 4-2),进入注册页面。
The first thing you need to do is set up a free user account. If you visit the Pricing and Signup page at `http://github.com/plans` and click the "Sign Up" button on the Free account (see figure 4-2), you’re taken to the signup page.
首先注册一个免费账户。访问 Pricing and Signup 页面 `http://github.com/plans` 并点击 Free acount 里的 Sign Up 按钮(见图 4-2),进入注册页面。

Insert 18333fig0402.png
Figure 4-2. GitHub 服务简介页面
4-2. GitHub 服务简介页面

这里要求选择一个系统中尚未存在的用户名,提供一个与之相连的电邮地址,以及一个密码(见图 4-3)
选择一个系统中尚未使用的用户名,提供一个与之相关联的电邮地址,并输入密码(见图 4-3)

Insert 18333fig0403.png
Figure 4-3. The GitHub user signup form
4-3. GitHub 用户注册表单

如果事先有准备,可以顺便提供 SSH 公钥。我们在前文中的"小型安装" 一节介绍过生成新公钥的方法。把生成的钥匙对中的公钥粘贴到 SSH Public Key (SSH 公钥)文本框中。点击 "explain ssh keys" 链接可以获取在所有主流操作系统上完成该步骤的介绍。
点击 "I agree,sign me up (同意条款,让我注册)" 按钮就能进入新用户的控制面板(见图 4-4)。
如果方便,现在就可以提供你的 SSH 公钥。我们在前文的"小型安装" 一节介绍过生成新公钥的方法。把新生成的公钥复制粘贴到 SSH Public Key 文本框中即可。要是对生成公钥的步骤不太清楚,也可以点击 "explain ssh keys" 链接,会显示各个主流操作系统上完成该步骤的介绍。点击 "I agree,sign me up" 按钮完成用户注册,并转到该用户的 dashboard 页面(见图 4-4):

Insert 18333fig0404.png
Figure 4-4. GitHub 用户面板
4-4. GitHub 的用户面板

然后就可以建立新仓库了
接下来就可以建立新仓库了

### 建立新仓库 ###

点击用户面板上仓库旁边的 "create a new one(新建)" 连接。进入 Create a New Repository (新建仓库)表格(见图 4-5)
点击用户面板上仓库旁边的 "create a new one" 链接,显示 Create a New Repository 的表单(见图 4-5)

Insert 18333fig0405.png
Figure 4-5. 在 GitHub 建立新仓库
4-5. 在 GitHub 上建立新仓库

唯一必做的仅仅是提供一个项目名称,当然也可以添加一点描述。搞定这些以后,点 "Create Repository(建立仓库)" 按钮新仓库就建立起来了(见图4-6)
当然,项目名称是必不可少的,此外也可以适当描述一下项目的情况或者给出官方站点的地址。然后点击 "Create Repository" 按钮新仓库就建立起来了(见图 4-6)

Insert 18333fig0406.png
Figure 4-6. GitHub 项目头信息
4-6. GitHub 上各个项目的概要信息

由于还没有提交代码,GitHub 会展示如何创建一个新项目,如何推送一个现存项目,以及如何从一个公共的 Subversion 仓库导入项目(译注:这简直是公开挖 google code 和 sourceforge 的墙角)(见图 4-7)
由于尚未提交代码,点击项目地址后 GitHub 会显示一个简要的指南,告诉你如何新建一个项目并推送上来,如何从现有项目推送,以及如何从一个公共的 Subversion 仓库导入项目(见图 4-7)

Insert 18333fig0407.png
Figure 4-7. 新仓库指南
4-7. 新仓库指南

该指南和本书前文中的介绍类似。要把一个非 Git 项目变成 Git 项目,运行
该指南和本书前文介绍的类似,对于新的项目,需要先在本地初始化为 Git 项目,添加要管理的文件并作首次提交:

$ git init
$ git add .
$ git commit -m 'initial commit'

一旦拥有一个本地 Git 仓库,把 GitHub 添加为远程仓库并推送 master 分支
然后在这个本地仓库内把 GitHub 添加为远程仓库,并推送 master 分支上来

$ git remote add origin git@github.com:testinguser/iphone_project.git
$ git push origin master

这时该项目就托管在 GitHub 上了。你可以把它的 URL 发给每个希望分享该工程的人。本例的 URL 是 `http://github.com/testinguser/iphone_project`你将在项目页面的头部发现有两个 Git URL(见图 4-8)
现在该项目就托管在 GitHub 上了。你可以把它的 URL 分享给每位对此项目感兴趣的人。本例的 URL 是 `http://github.com/testinguser/iphone_project`而在项目页面的摘要部分,你会发现有两个 Git URL 地址(见图 4-8)

Insert 18333fig0408.png
Figure 4-8. 项目开头的公共 URL 和私有 URL
4-8. 项目摘要中的公共 URL 和私有 URL

Public Clone URL(公共克隆 URL)是一个公开的,只读的 Git URL,任何人都可以通过它克隆该项目。可以随意的散播这个 URL,发步到个人网站之类的地方
Public Clone URL 是一个公开的,只读的 Git URL,任何人都可以通过它克隆该项目。可以随意散播这个 URL,比如发布到个人网站之类的地方等等

Your Clone URL(私用克隆 URL)是一个给予 SSH 的读写 URL,只有使用与上传的 SSH 公钥对应的密钥来连接时,才能通过它进行读写操作。其他用户访问项目页面的时候看不到该URL——只有公共的那个
Your Clone URL 是一个基于 SSH 协议的可读可写 URL,只有使用与上传的 SSH 公钥对应的密钥来连接时,才能通过它进行读写操作。其他用户访问该项目页面时只能看到之前那个公共的 URL,看不到这个私有的 URL

### 从 Subversion 中导入项目 ###
### 从 Subversion 导入项目 ###

如果想把某个公共 Subversion 项目导入 Git,GitHub 可以帮忙。在指南的最后有一个指向导入 Subversion 页面的链接。点击它,可以得到一个表格,它包含着有关导入流程的信息以及一个用来粘贴公共 Subversion 项目连接的文本框(见图 4-9)
如果想把某个公共 Subversion 项目导入 Git,GitHub 可以帮忙。在指南的最后有一个指向导入 Subversion 页面的链接。点击它会看到一个表单,包含有关导入流程的信息以及一个用来粘贴公共 Subversion 项目连接的文本框(见图 4-9)

Insert 18333fig0409.png
Figure 4-9. Subversion 导入界面
4-9. Subversion 导入界面

如果项目很大,采用非标准结构,或者是私有的,那么该流程将不适用。在第七章,你将了解到手动导入复杂工程的方法
如果项目很大,采用非标准结构,或者是私有的,那就无法借助该工具实现导入。到第 7 章,我们会介绍如何手工导入复杂工程的具体方法

### 开始合作 ###
### 添加协作开发者 ###

现在把团队里其他的人也加进来。如果 John,Josie 和 Jessica 都在 GitHub 注册了账户,要给他们向仓库推送的访问权,可以把它们加为项目合作者。这样他们的公钥就能用来向仓库推送了
现在把团队里的其他人也加进来。如果 John,Josie 和 Jessica 都在 GitHub 注册了账户,要赋予他们对该仓库的推送权限,可以把他们加为项目协作者。这样他们就可以通过各自的公钥访问我的这个仓库了

点击项目页面上方的 "edit(编辑)" 按钮或者顶部的 Admin (管理)标签进入项目管理页面(见图 4-10)
点击项目页面上方的 "edit" 按钮或者顶部的 Admin 标签,进入该项目的管理页面(见图 4-10)

Insert 18333fig0410.png
Figure 4-10. GitHub 管理页面
4-10. GitHub 的项目管理页面

为了给另一个用户添加项目的写权限,点击 "Add another collaborator(添加另一个合作者)" 链接。一个新文本框会出现,用来输入用户名。在输入用户名的同时将会跳出一个帮助提示,显示出可能匹配的用户名。找到正确的用户名以后,点 Add (添加)按钮,把它变成该项目的合作者(见图 4-11)
为了给另一个用户添加项目的写权限,点击 "Add another collaborator" 链接,出现一个用于输入用户名的表单。在输入的同时,它会自动跳出一个符合条件的候选名单。找到正确用户名之后,点 Add 按钮,把该用户设为项目协作者(见图 4-11)

Insert 18333fig0411.png
Figure 4-11. 为项目添加合作者
Insert 18333fig0411.png
4-11. 为项目添加协作者

添加完合作者以后,就可以在 Repository Collaborators (仓库合作者)区域看到他们的列表(见图 4-12)
添加完协作者之后,就可以在 Repository Collaborators 区域看到他们的名单(见图 4-12)

Insert 18333fig0412.png
Figure 4-12. 项目合作者列表
4-12. 项目协作者名单

如果需要取消某人的访问权,点击 "revoke (撤销)",他的推送权限就被删除了。在未来的项目中,可以通过复制现存项目的权限设定来得到相同的合作者群组
如果要取消某人的访问权,点击 "revoke" 即可取消他的推送权限。对于将来的项目,你可以从现有项目复制协作者名单,或者直接借用协作者群组

### 项目页面 ###

在推送或从 Subversion 导入项目之后,你会得到一个类似图 4-13 的项目主页
在推送或从 Subversion 导入项目之后,你会看到一个类似图 4-13 的项目主页

Insert 18333fig0413.png
Figure 4-13. GitHub 项目主页
4-13. GitHub 上的项目主页

其他人访问你的项目时,他们会看到该页面。它包含了该项目不同方面的标签。Commits 标签将按时间展示逆序的 commit 列表,与 `git log` 命令的输出类似。Network 标签展示所有 fork 了该项目并做出贡献的用户的关系图。Downloads 标签允许你上传项目的二进制文件,并提供了指向该项目所有标记过的位置的 tar/zip 打包下载连接。Wiki 标签提供了一个用来撰写文档或其他项目相关信息的 wiki。Graphs 标签包含了一些可视化的项目信息与数据。刚开始进入的 Source 标签页面列出了项目的主目录;并且在下方自动展示 README 文件的内容(如果该文件存在的话)。该标签还包含了最近一次提交的相关信息
别人访问你的项目时看到的就是这个页面。它有若干导航标签,Commits 标签用于显示提交历史,最新的提交位于最上方,这和 `git log` 命令的输出类似。Network 标签展示所有派生了该项目并做出贡献的用户的关系图谱。Downloads 标签允许你上传项目的二进制文件,提供下载该项目各个版本的 tar/zip 。Wiki 标签提供了一个用于撰写文档或其他项目相关信息的 wiki 站点。Graphs 标签包含了一些可视化的项目信息与数据。默认打开的 Source 标签页面,则列出了该项目的目录结构和概要信息,并在下方自动展示 README 文件的内容(如果该文件存在的话),此外还会显示最近一次提交的相关信息

### 派生(forking)项目 ###
### 派生项目 ###

如果想向一个自己没有推送权限的项目贡献代码,GitHub 提倡使用派生(forking)。在你发现一个感兴趣的项目,打算在上面 Hack 一把的时候,可以点击页面上方的 "fork(派生)" 按钮,GitHub 会为你的用户复制一份该项目,这样你就可以向它推送内容了
如果要为一个自己没有推送权限的项目贡献代码,GitHub 鼓励使用派生(fork)。到那个感兴趣的项目主页上,点击页面上方的 "fork" 按钮,GitHub 就会为你复制一份该项目的副本到你的仓库中,这样你就可以向自己的这个副本推送数据了

使用这个办法,项目维护者不用操心为了推送权限把其他人加为合作者的麻烦。大家可以派生一个项目副本并进行推送,而后项目的主要维护者可以把这些副本添加为远程仓库,从中拉取更新的内容进行合并
采取这种办法的好处是,项目拥有者不必忙于应付赋予他人推送权限的工作。随便谁都可以通过派生得到一个项目副本并在其中展开工作,事后只需要项目维护者将这些副本仓库加为远程仓库,然后提取更新合并即可

要派生一个项目,到该项目的页面(本例中是 mojombo/chronic)点击上面的 "fork" 按钮(见图 4-14)
要派生一个项目,到原始项目的页面(本例中是 mojombo/chronic)点击 "fork" 按钮(见图 4-14)

Insert 18333fig0414.png
Figure 4-14. 点击 "fork" 按钮来获得任意项目的可写副本
4-14. 点击 "fork" 按钮获得任意项目的可写副本

几秒钟以后,你将进入新建的项目页面,显示出该项目是派生自另一个项目的副本(见图 4-15)
几秒钟之后,你将进入新建的项目页面,会显示该项目派生自哪一个项目(见图 4-15)

Insert 18333fig0415.png
Figure 4-15. 你派生的项目副本
4-15. 派生后得到的项目副本

### GitHub 小节 ###
### GitHub 小结 ###

GitHub 就介绍这么多,不过意识到做到这些是多么快捷十分重要。不过几分钟的时间,你就能创建一个账户,添加一个新的项目并开始推送。如果你的项目是开源的,它还同时获得了对庞大的开发者社区的可视性,社区成员可能会派生它并做出贡献。退一万步讲,这至少是个快速开始尝试 Git 的好办法
关于 GitHub 就先介绍这么多,能够快速达成这些事情非常重要(译注:门槛的降低和完成基本任务的简单高效,对于推动开源项目的协作发展有着举足轻重的意义。)。短短几分钟内,你就能创建一个新账户,添加一个项目并开始推送。如果项目是开源的,整个庞大的开发者社区都可以立即访问它,提供各式各样的帮助和贡献。最起码,这也是一种 Git 新手立即体验尝试 Git 的捷径

## 小节 ##
## 小结 ##

几个不同的方案可以让你获得远程 Git 仓库来与其他人合作或分享你的成果
我们讨论并介绍了一些建立远程 Git 仓库的方法,接下来你可以通过这些仓库同他人分享或合作

运行自己的服务器意味着更多的控制权以及在防火墙内部操作的可能性,然而这样的服务器通常需要投入一定的时间来架设和维护。如果把数据放在托管服务上,假设和维护变得十分简单;然而,你不得不把代码保存在别人的服务器上,很多公司不允许这种做法
运行自己的服务器意味着更多的控制权以及在防火墙内部操作的可能性,当然这样的服务器通常需要投入一定的时间精力来架设维护。如果直接托管,虽然能免去这部分工作,但有时出于安全或版权的考虑,有些公司禁止将商业代码托管到第三方服务商

使用哪个方案或哪种方案的组合对你和你的团队更合适,应该不是一个太难的决定。
现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。这样的组可以有尽可能有随意多个,每一个包含不同的用户和项目。甚至可以指定某个组为成员,来继承它所有的成员。
所以究竟采取哪种方案,并不是个难以取舍的问题,或者其一,或者相互配合,哪种合适就用哪种。

0 comments on commit d1e4ee1

Please sign in to comment.