Skip to content

Commit 2d0a3a1

Browse files
committed
Initial commit for the book: GotGitHub.
0 parents  commit 2d0a3a1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+4824
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
什么是GitHub
2+
================
3+
4+
GitHub,网址 https://github.com/ ,是一个开源软件项目的托管平台,因为只使用Git作为唯一的版本库格式进行版本库托管,故名GitHub。GitHub的注册用户已经接近百万,托管的版本库数量已超两百万,其中不乏知名的开源项目,如:Ruby on Rails [#]_ ,Hibernate [#]_ ,phpBB [#]_ ,jQuery [#]_ ,Prototype [#]_ ,Homebrew [#]_ 等。
5+
6+
GitHub于2008年4月10日正式发布 [#]_ ,相比于始于1999年的SourceForge [#]_ 和2005年的GoogleCode [#]_ ,GitHub后来者居上,从代码提交数量上看,GitHub已经超越其前辈 [#]_ ,如图1-1所示。
7+
8+
.. figure:: /images/explore-github/survival-of-the-forges.png
9+
:scale: 100
10+
11+
图1-1:开源项目托管平台提交数量对照
12+
13+
对于一个开源项目,从开发角度讲大体上分为两类人群,一类称为核心开发团队,他们可以向保存源代码的版本库提交,即对源代码的修改具有最终的决定权。另外一类称为贡献者,他们不是核心团队的成员,虽然也能看到源代码,但是只可读不可写。
14+
15+
采用传统的集中式版本控制系统(如SVN)的开源项目,这两个群体的用户体验都不是太好。如图1-2所示,项目的贡献者(非核心成员)很不“高兴”,因为他们即便有修改代码的能力和渴望,也不能直接向版本库提交,要想成为提交者需要一个很长的建立信任的过程。对于项目的核心开发团队,体验也不是很好,因为凡是涉及到版本库的操作(检入、检出、查看日志等)都需要在联网的状态下运行,网络带宽对用户体验影响相当大。
16+
17+
.. figure:: /images/explore-github/svn-workflow.png
18+
:scale: 100
19+
20+
图1-2:使用集中式版本控制系统
21+
22+
Git等分布式版本控制系统的出现,彻底颠覆了原有代码管理的管理模式和组织架构。使用Git,不再需要唯一的、集中式的版本库,而是每个开发者本地都拥有一份完整的版本库克隆。Git并不排斥集中式的使用模式,但更倾向于将集中式模式下的版本库称为共享版本库,核心开发团队的成员可以将自己本地版本库的提交推送到共享版本库上。
23+
24+
使用Git做版本控制,如图1-3所示,核心开发团队非常“高兴”,因为他们和共享版本库之间不必一直保持连接状态,诸如查看日志、提交、创建分支等几乎全部操作都(脱离网络)在本地的版本库中完成。项目贡献者(非核心成员)也不再那么沮丧,因为版本库人人皆可更改(当然是对本地版本库而言)。稍微让贡献者感到困难的就是如何将自己的改动被核心开发团队所了解并接纳。Git提供了多种途径,一个方法是先用 ``git-format-patch`` 命令将本地提交转换为补丁文件或补丁文件序列,再通过邮件发送给核心开发团队。另外一个办法就是搭建一个自己专有的共享版本库,让核心团队的开发者到自己共享的版本库来抓取(Pull)。自己动手搭建Git服务器建立共享版本库是一个难点,在我的
25+
《Git权威指南》一书中花了七个章节来介绍,掌握起来有一定难度。
26+
27+
.. figure:: /images/explore-github/git-workflow.png
28+
:scale: 100
29+
30+
图1-3:使用分布式版本控制系统
31+
32+
GitHub的出现极大地改善了开源项目的生态环境,无论项目的核心开发团队,还是普通的项目贡献者都工作得非常“愉快”。项目的创建者只需在GitHub上点击一下鼠标即可创建一个新版本库。普通的项目贡献者在GitHub上先找到自己希望参与的项目,然后只需点击一下鼠标即可在自己的托管空间下创建一个派生的版本库(即项目分支),就好像这个项目原本就是由自己创立的那样。如图1-4所示,当普通的项目贡献者完成开发,可以通过GitHub的Web界面向项目的核心开发团队发送一个拖拽请求(Pull Request),项目的核心团队收到 Pull Request 后审核代码,审核通过后可以直接点击Web界面上的合并按钮完成对贡献者代码的合并。
33+
34+
.. figure:: /images/explore-github/github-workflow.png
35+
:scale: 100
36+
37+
图1-4:GitHub的协同模式
38+
39+
----
40+
41+
.. [#] https://github.com/rails/rails
42+
.. [#] https://github.com/hibernate
43+
.. [#] https://github.com/phpbb/phpbb3
44+
.. [#] https://github.com/jquery/jquery
45+
.. [#] https://github.com/sstephenson/prototype
46+
.. [#] https://github.com/mxcl/homebrew
47+
.. [#] https://github.com/blog/40-we-launched
48+
.. [#] http://sourceforge.net/
49+
.. [#] http://code.google.com/
50+
.. [#] http://www.slideshare.net/sogrady/survival-of-the-forges
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
GitHub亮点
2+
===============
3+
4+
是什么让GitHub如此成功?GitHub有什么魔力?
5+
6+
1. 只用Git。
7+
8+
GitHub只支持Git格式的版本库托管,而不像其他开源项目托管平台还对CVS、SVN、Hg等格式的版本库进行托管。GitHub的哲学很简单,既然Git是最好的版本控制系统之一(对于喜欢GitHub的人没有之一),没有必要为兼顾其他版本控制系统而牺牲Git某些独有特性。因此没有支持其他版本控制系统的历史负担,是GitHub成功的要素之一。
9+
10+
只用Git并不是说GitHub完全无视其他版本控制系统的使用者,相反,GitHub面向SVN(Subversion)用户和Hg(Mercurial)用户开发了接口,让这些用户可以使用SVN或Hg的客户端工具访问Git版本库。
11+
12+
2. 对Git的完整支持。
13+
14+
相比其他开源项目托管平台,GitHub对Git版本库提供了完整的协议支持,支持HTTP智能协议、Git-daemon、SSH协议。相比只支持HTTP协议的GoogleCode,GitHub通过SSH协议可以实现版本库访问的无口令认证。
15+
16+
3. 无处不在的Git。
17+
18+
除了在版本库托管上使用Git,Git还被应用到GitHub更多的领域。维基使用Git,可以通过克隆维基所在的版本库,线下修改维基。在线粘贴信息的Gist网站 [#]_ 使用Git,记录变更历史。在Jekyll应用的帮助下,可以用Git版本库维护个人网站和博客。
19+
20+
4. 在线编辑文件。
21+
22+
GitHub提供了在线编辑文件的功能,即使不熟悉Git的用户也可以直接修改版本库里的文件。
23+
24+
5. 社交编程。
25+
26+
将社交网络引入项目托管平台是GitHub的创举。用户可以关注项目、关注其他用户进而了解项目和开发者动态。项目的派生(Fork)和拉拽请求(Pull Request)构成GitHub最独具一格的工作模式。对提交代码的逐行评注及Pull Request构成了GitHub特色的代码审核。
27+
28+
6. 商业上的成功。
29+
30+
GitHub通过私有版本库托管、面向企业的版本库托管、人员招聘等付费服务获得了商业上的成功,这种成功使得GitHub不必以页面中嵌入广告的方式维持运营,最大的受益者还是用户。
31+
32+
7. 关注细节。
33+
34+
GitHub网站采用了Ruby on Rails的架构,在Web设计中运用了大量的JavaScript、AJAX、HTML5等技术,支持使用了Markdown等标记语言的文件自动渲染和显示,等等。关注细节使得GitHub成为了项目托管领域的后起之秀。
35+
36+
----
37+
38+
.. [#] https://gist.github.com/
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
探索GitHub
2+
===============
3+
4+
打开浏览器,访问网址 https://github.com/ 来探索GitHub吧。GitHub的首页(图1-5所示)特意给出了Git和GitHub的音标,可能不少国人需要据此校准一下Git的读音 [#]_ 。
5+
6+
.. figure:: /images/explore-github/github-homepage.png
7+
:scale: 100
8+
9+
图1-5:GitHub的首页
10+
11+
12+
在首页的右上角是导航条,从左至右分别是:收费方案和注册、探索GitHub、功能、博客和登录。还醒目地显示出不断增长着的注册用户数和托管的版本库数目。
13+
14+
15+
如果想要了解GitHub上哪些项目最热门,进而寻找到好的开源产品,那么可以从导航条中的“Explore GitHub”开始。图1-6显示通过对社交数据的分析得到的托管版本库动态趋势。
16+
17+
.. figure:: /images/explore-github/explore-trends.png
18+
:scale: 100
19+
20+
图1-6:版本库动态趋势
21+
22+
还可以根据感兴趣的人数、建立分支的数量、关注程度等寻找热门项目。图1-7显示分支最多的项目是Homebrew —— 一款用ruby开发的苹果Mac OS X通用的非官方包管理软件。考虑到不断攀升的苹果用户数量以及易于上手的ruby语言,这并不奇怪。
23+
24+
.. figure:: /images/explore-github/explore-repositories.png
25+
:scale: 100
26+
27+
图1-7:热门版本库排行
28+
29+
图1-8显示了托管版本库所用编程语言的动态分布,多掌握几个热门编程语言一定会对找工作有帮助。;-)
30+
31+
.. figure:: /images/explore-github/explore-languages.png
32+
:scale: 100
33+
34+
图1-8:托管项目的编程语言统计
35+
36+
37+
GitHub通过屏幕截图等方式介绍了GitHub的常见功能,可以通过点击导航条中的“Features”访问到。如图1-9可以看到在项目管理中,如何利用GitHub提供的团队管理功能、维基、缺陷追踪以及代码审核。
38+
39+
.. figure:: /images/explore-github/features-pm.png
40+
:scale: 100
41+
42+
图1-9:GitHub功能介绍
43+
44+
博客也是了解GitHub的一个重要的途径,可以获知GitHub的最新动态,如最新改进等。图1-10显示的是GitHub在感恩节推出的促销活动:收费服务免费试用一个月!如果及时关注博客就不会错过噢。
45+
46+
.. figure:: /images/explore-github/blog.png
47+
:scale: 100
48+
49+
图1-10:GitHub博客
50+
51+
图1-10的博客中一个由小章鱼和小猫组合而成的吉祥物,名字叫做Octocat。这个可爱的GitHub吉祥物时不时会出来带给你惊喜。
52+
53+
马上到GitHub上注册,开始GitHub之旅。
54+
55+
----
56+
57+
.. [#] 《Git权威指南》第1页。

01-explore-github/index.rst

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
探索GitHub
2+
********************
3+
熟悉Git [#]_ 的人几乎都知道并喜欢GitHub [#]_ ,反过来GitHub也吸引更多的人来使用Git。GitHub正在成为开源项目托管的主要平台,是什么成就了GitHub?
4+
5+
.. toctree::
6+
:maxdepth: 1
7+
8+
010-what-is-github
9+
020-github-hightlights
10+
030-explore-github
11+
12+
.. seealso::
13+
14+
本书并非一本介绍Git的书,并且假设读者已经掌握了Git的相关操作。
15+
如果读者对Git尚不了解,可以参考我写的《Git权威指南》一书 [#]_ 。此外还可以从网上找到很多免费的、很好的Git资料,
16+
如:Git社区书 [#]_ 、Progit [#]_ 等。
17+
18+
----
19+
20+
.. [#] http://git-scm.com/
21+
.. [#] https://github.com/
22+
.. [#] ISBN:9787111349679, 由机械工业出版社华章公司于2011年7月出版。
23+
.. [#] http://book.git-scm.com/
24+
.. [#] http://progit.org/book/
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
创建GitHub账号
2+
===============
3+
4+
注册GitHub账号,只要点击导航条中的“Pricing and Signup”,或者点击首页中那个大大的“Plans,Pricing and Signup”按钮,即进入收费方案介绍及注册页面。
5+
6+
收费?不必担心,开源软件托管是GitHub的基石,对于开源项目的版本库(即非私有版本库)的托管,GitHub是免费的。在收费方案及注册页面中,最上面的就是针对于开源的免费托管方案,如图2-1所示。
7+
8+
.. figure:: /images/join-github/free-plan.png
9+
:scale: 100
10+
11+
图2-1:针对开源项目(公开版本库)的免费方案
12+
13+
至于本页其他付费方案,将在后面的章节介绍。点击免费方案右侧的“Create a free account”按钮,就进入到注册页面,如图2-2所示。
14+
15+
.. figure:: /images/join-github/signup.png
16+
:scale: 100
17+
18+
图2-2:账号注册
19+
20+
GitHub的注册页面非常简洁,只有登录ID,邮件地址和口令需要输入。要注意的是每个邮件地址只能注册一次。注册完毕即以新注册的账号自动登录,图2-3是以新注册的gotgithub用户登录后的首页。在首页右上方的导航条,可以看到当前登录用户的名称,如图2-3中显示为gotgithub。在登录用户名称前显示用户照片,因为尚未设置所以显示为缺省图片——GitHub吉祥物Octocat的剪影。点击导航条中的“Account Settings”,对账号进行进一步设置。
21+
22+
.. figure:: /images/join-github/loggedin.png
23+
:scale: 100
24+
25+
图2-3:登录后的GitHub首页
26+
27+
图2-4对用户公开身份信息进行设置,所有内容均为可选项,如果填写将显示在个人页面中,并能被所有人访问。注意修改用户头像需要访问第三方头像设置网站:gravatar.com。Gravatar网站提供的头像服务是一个通用服务,可为大部分Web应用所使用。
28+
29+
图2-4中还显示了当前用户使用的GitHub托管方案(Free)和使用统计。因为当前注册用户选择的是免费方案,所以可用的私有版本库数量和私有空间协同者数目都是零。免费方案拥有300MB托管空间,因当前尚未创建版本库托管,所以空间占用为零。GitHub对开源软件的300MB托管空间限制并非硬性限制,可以申请扩增托管空间,如果不存在滥用情况的话。
30+
31+
.. figure:: /images/join-github/setting-profile.png
32+
:scale: 100
33+
34+
图2-4:账户设置页
35+
36+
点击菜单中的“Account Admin”,可以更改口令、查看API Token、修改用户名,以及删除自身账号,如图2-5所示。
37+
38+
.. figure:: /images/join-github/setting-admin.png
39+
:scale: 100
40+
41+
图2-5:账户管理
42+
43+
其中API Token是和用户口令相关的密钥,当用户口令更改时API Token也随之更改。GitHub的某些应用会使用API Token进行身份认证,从而避免直接使用用户口令造成泄露的风险。API Token若泄露的危害要远远小于口令泄露,这因为API Token不能用于登录GitHub网站等,而且一旦API Token泄露可以很容易通过更改口令的方式更换API Token。
44+
45+
点击菜单中的“Email Addresses”,可以添加和删除邮件地址,如图2-6所示。GitHub允许为一个账号绑定多个邮件地址,以便能够将Git版本库中的提交(提交者以 "用户名 <邮件地址>" 的格式给出)正确对应到GitHub账户。
46+
47+
.. figure:: /images/join-github/setting-email.png
48+
:scale: 100
49+
50+
图2-6:邮件地址管理
51+
52+
GitHub为托管的Git版本库提供SSH协议支持,即用户可以以公钥认证的方式连接到GitHub的SSH服务器。下面的示例用ssh命令连接github.com的SSH服务,登录用户名为git(所有GitHub用户共享此SSH用户名,不要写成其他)。
53+
54+
::
55+
56+
$ ssh -T git@github.com
57+
Permission denied (publickey).
58+
59+
上面的示例显示登录失败,这是因为我们尚未在GitHub账户中正确设置公钥认证。图2-7显示的是GitHub的SSH公钥设置界面。
60+
61+
.. figure:: /images/join-github/setting-ssh.png
62+
:scale: 100
63+
64+
图2-7:SSH公钥管理
65+
66+
要想向GitHub添加SSH公钥,首先要确保正确生成了对应的公钥/私钥对。关于SSH公钥认证,在我的《Git权威指南》一书的“第29章使用SSH协议”中有详细介绍,这里仅做简要的介绍。
67+
68+
GitHub的SSH服务支持OpenSSH格式的公钥认证,可以通过Linux、Mac OS X、或Cygwin下的 ``ssh-keygen`` 命令创建公钥/私钥对。命令如下:
69+
70+
::
71+
72+
$ ssh-keygen
73+
74+
然后根据提示在用户主目录下的 .ssh 目录中创建默认的公钥/私钥对文件,其中 ``~/.ssh/id_rsa`` 是私钥文件, ``~/.ssh/id_rsa.pub`` 是公钥文件。注意私钥文件要严加保护,不能泄露给任何人,如果在执行 ``ssh-keygen`` 命令时选择了使用口令保护私钥,私钥文件是经过加密的。公钥文件 ``~/.ssh/id_rsa.pub`` 则可以放心地公开给任何人。
75+
76+
也可以用 ``ssh-keygen`` 命令以不同的名称创建多个公钥,当拥有多个GitHub账号时,非常重要。这是因为虽然一个GitHub账号允许使用多个不同的SSH公钥,但反过来,一个SSH公钥只能对应于一个GitHub账号。下面的命令在 ``~/.ssh`` 目录下创建名为 ``gotgithub`` 的私钥和名为 ``gotgithub.pub`` 的公钥文件。
77+
78+
::
79+
80+
$ ssh-keygen -C "gotgithub@gmail.com" -f ~/.ssh/gotgithub
81+
82+
当生成的公钥/私钥对不在缺省位置(~/.ssh/id_rsa等)时,可以在 ``ssh`` 命令中用 ``-i <filename>`` 指定,或者在配置文件 ``~/.ssh/config`` 中通过相应的设置进行设定。例如对于上例创建了非缺省公钥/私钥对 ``~/.ssh/gotgithub`` ,可以在 ``~/.ssh/config`` 配置文件中写入如下配置。
83+
84+
::
85+
86+
Host github.com
87+
User git
88+
Hostname github.com
89+
PreferredAuthentications publickey
90+
IdentityFile ~/.ssh/gotgithub
91+
92+
.. 通过在配置文件 ``~/.ssh/config`` 中添加不同的 Host 主机名,可以实现在同一个客户端用Git命令(以SSH协议)访问不同的GitHub账户。
93+
94+
好了,有了上面的准备,就可以把公钥文件中的内容复制到GitHub的SSH公钥管理的对话框中。注意整个公钥为一行,不要断行。
95+
96+
.. figure:: /images/join-github/setting-ssh-gotgithub.png
97+
:scale: 100
98+
99+
图2-8:添加SSH公钥认证
100+
101+
设置成功后,再用 ``ssh`` 命令访问 github.com,会显示一条认证成功信息,然后退出。在认证成功的信息中还会显示该公钥对应的用户名。
102+
103+
::
104+
105+
$ ssh -T git@github.com
106+
Hi gotgithub! You've successfully authenticated, but GitHub does not provide shell access.
107+
108+
如果您未能看到类似的成功信息,可以通过在 ``ssh`` 命令后面添加 ``-v`` 参数加以诊断,会在冗长的会话中看到认证所使用的公钥文件等信息。
109+
110+
::
111+
112+
$ ssh -Tv git@github.com
113+
...
114+
debug1: Authentications that can continue: publickey
115+
debug1: Next authentication method: publickey
116+
debug1: Offering RSA public key: /Users/jiangxin/.ssh/gotgithub
117+
...
118+
debug1: Entering interactive session.
119+
Hi gotgithub! You've successfully authenticated, but GitHub does not provide shell access.
120+
...
121+
122+
账号设置的最后一项是向GitHub提供你的求职信息。GitHub作为一个优秀程序员的聚集地,已经成为重要的IT人才招聘途径,如果你需要找工作的话,提供简历并打开“Available for hire”选项,如图2-9所示。
123+
124+
.. figure:: /images/join-github/setting-job.png
125+
:scale: 100
126+
127+
图2-9:求职信息管理
128+

0 commit comments

Comments
 (0)