读书笔记 | GitHub入门与实践1
为什么读这本书
因为没有系统全面的对GitHub的理解,所以选择这本书来把所有的内容串起来
本书有十个章节两个附录 大概是每篇笔记写个三四章左右
第一章 欢迎来到GitHub的世界
什么是GitHub
GitHub 是为开发者提供Git 仓库的托管服务。这是一个让开发者与朋友、同事、同学及陌生人共享代码的完美场所。
GitHub 与Git 的区别
在此讲解一下GitHub 与Git 注a 的区别。GitHub 与Git 是完全不同的两个东西。本书中,自始至终都以GitHub 和Git 的方
式区分描述。在Git 中,开发者将源代码存入名叫“Git 仓库”的资料库中并加以使用。而GitHub 则是在网络上提供Git 仓库的一项服务。也就是说,GitHub 上公开的软件源代码全都由Git 进行管理。理解Git,是熟练运用GitHub 的关键所在。Git 的相关知识,我们将在第2 章中为您详细讲解。注a http://git-scm.com
在开发者之间引发化学反应的Pull Request
在GitHub 这个聚集了世界各地软件开发者的地方,有个在过去绝对是无法想象的事正在飞速地进行着——素未谋面的开发者们隔着半个地球的距离共同开发软件。我们不妨称之为开发者之间的化学反应吧。
这种事成为可能,都要归功于一个名为Pull Request 的功能
Tips:还可以这样写!!
GitHub 中可使用的描述方法并不止“@ 用户名”一种。
输入“@ 组织名”可以让属于该Organization(组织)的所
有成员收到通知注a。输入“@ 组织名/ 团队”可以让该团队的所
有成员收到通知。这就是同时向多人发送通知的方法。
输入“# 编号”,会连接到该仓库所对应的Issue 编号。输入
“用户名/ 仓库名# 编号”则可以连接到指定仓库所对应的Issue
编号。只要按照这类特定格式书写便会自动创建链接。
多加利用上述这些功能,可以让交流更有效率。注a Organization 的详细内容将在第10 章中进行讲解。
社会化编程
GitHub 这一服务,为开源世界带来了社会化编程的概念。这一概念影响了全世界众多程序员,说其是软件开发方法的一次革命都不为过。在这里,我们将详细解说社会化编程的概念。您听过SOCIAL CODING(以下称为社会化编程)这个词吗?如果没有,那么您见过图1.7 的LOGO 吗?
这是GitHubA 曾经使用过的LOGO。上面附带着SOCIAL CODING
这一副标题。2013 年4 月起,GitHub 开始使用图1.8 中的LOGO。


GitHub 这一服务创造了社会化编程的概念。随着GitHub 的出现,软件开发者们才真正意义上拥有了源代码。世界上任何人都可以比从前更加容易地获得源代码,将其自由更改并加以公开。如今,世界众多程序员都在通过GitHub 公开源代码,同时利用GitHub 支持着自己日常的软件开发。
为什么需要社会化编程
当今的IT 业界已经没有了终身雇佣制,人才流动性日益增大。可以说,每个月我们都能在一些著名开发者的博客中看到这种现象:月末刚发布“辞职了”的消息,月初就又“入职了”。那么,如果您是程序员的面试官,两者之间您会选择哪一位呢?
● 能查看到以前所写代码的程序员or 无法查看的程序员
● 精通最新软件的程序员or 不精通的程序员
● 对语言或软件差异带来的不同文化有所理解的程序员or 不理解的程序员
为了不成为后一种程序员,理解社会化编程和GitHub 至关重要。
不要闭目塞听,要接触不同的文化
在工作中接触非公开代码的职业程序员们,更应该接触世界上的不同文化,拓展见闻。如果只在公司这一封闭的小世界中敲代码,往往在不知不觉间,手中的技术就变得陈腐不堪了。放眼世界,注意那些日新月异的源代码、技术、设计以及文化,会对自己编写的源代码及成果带来巨大影响。笔者自身也曾在知名框架的实现中受到启发,良好地实现了公司内部开发的软件。
会写代码的程序员更受青睐
在软件开发行业中,Web 业界的变化尤其激烈,能实际编写源代码的程序员大受青睐如今,GitHub 的出现已经让所有人平等拥有公开源代码的权利。看看Facebook 或Twitter 能了解一个人的品性,而看看GitHub 就能了解一个程序员的实力。
GitHub 最大的特征是“面向人”
这里讲解一下GitHub 与单纯的仓库托管服务的不同之处,在笔者看来这是一个重点问题。GitHub 与以往的仓库托管服务最大的不同点,就在于它以人为中心。以往的仓库托管服务都是以项目为中心,每个项目就是一个信息封闭的世界。虽然能够知道一个仓库的管理者是谁,但这个管理者还在做哪些事,我们就不得而知了。
GitHub 除项目之外,还可以把注意力集中到人身上。我们不但能阅览一个人公开的所有源代码,只要查看其控制面板中的News Feed,还能知道他对哪些仓库感兴趣,什么时候做过提交等。一个人在GitHub进行的开发是一目了然的您可以将注意力聚焦到感兴趣的人身上。他既可以是您崇拜已久的超级黑客,也可以是同校同学或公司的同事。
能同时关注人与代码,是GitHub 为我们带来的一个新的世界。
GitHub 提供的主要功能
Git 仓库
一般情况下,我们可以免费建立任意个GitHub 提供的Git 仓库。但如果需要建立只对特定人物或只对自己公开的私有仓库,则需要依照套餐类型B 支付每月最低7 美元的使用费 (
本书太老 请以最新价格为准)Organization
通常来说,个人使用时只要使用个人账户就足够了,但如果是公司,建议使用Organization 账户。它的优点在于可以统一管理账户和权限,还能统一支付一些费用。如果只使用公开仓库,是可以免费创建Organization 账户的。因此,如果是以交流群或IT 小团体的形式进行软件开发时不妨试一试。组织或企业使用GitHub 时需注意的地方将在第10 章进行详细讲解。
Issue
Issue 功能,是将一个任务或问题分配给一个Issue 进行追踪和管理的功能。可以像BUG 管理系统或TiDD(Ticket-driven Development)的Ticket 一样使用。在GitHub 上,每当进行我们即将讲解的Pull Request,都会同时创建一个Issue。每一个功能更改或修正都对应一个Issue,讨论或修正都以这个Issue 为中心进行。只要查看Issue,就能知道和这个更改相关的一切信息,并以此进行管理。在Git 的提交信息中写上Issue 的ID(例如“#7”),GitHub 就会自
动生成从Issue 到对应提交的链接。另外,只要按照特定的格式描述提交信息,还可以关闭Issue。这是一个非常方便的功能,请务必实践一下。详细内容将在第5 章中为您讲解。Wiki
通过Wiki 功能,任何人都能随时对一篇文章进行更改并保存,因此可以多人共同完成一篇文章。该功能常用在开发文档或手册的编写中。语法方面,可以通过第5 章讲解的GFM 语法进行书写。Wiki 页也是作为Git 仓库进行管理的,改版的历史记录会被切实保存下来,使用者可以放心改写。由于其支持克隆至本地进行编辑,所以程序员使用时可以不必开启浏览器。
Pull Request
开发者向GitHub 的仓库推送更改或功能添加后,可以通过PullRequest 功能向别人的仓库提出申请,请求对方合并。
Pull Request 送出后,目标仓库的管理者等人将能够查看PullRequest 的内容及其中包含的代码更改。同时,GitHub 还提供了对Pull Request 和源代码前后差别进行讨论的功能。通过此功能,可以以行为单位对源代码添加评论,让程序员之间高效地交流。详细内容及实际发送Pull Request 的流程将在第6 章中进行讲解。
Tips:GitHub 上受到瞩目的软件
小结
本章就实现了社会化编程的GitHub 进行了讲解。各部分的详细解说将在随后的章中进行。
第二章 Git的导入/应用
Git 仓库管理功能是GitHub 的核心。因此,使用GitHub 之前必须先掌握Git 的相关知识,同时本地的设备还要安装Git 的环境。本章我们将为大家讲解使用Git 所需的知识及各种设置。
诞生背景
Git 属于分散型版本管理系统,是为版本管理而设计的软件。Linux 的创始人Linus Torvalds 在2005 年开发了Git 的原型程序。当时,由于在Linux 内核开发中使用的既有版本管理系统的开发方许可证发生了变更,为了更换新的版本管理系统,Torvalds 开发了Git。
Linux 内核的更新速度在全世界也算首屈一指。因此,势必需要一个功能强、性能高的版本管理系统来提高开发速度。在当时的开源环境下,虽然已经有数款版本管理软件被开发出来,但功能和性能都差强人意。加之Git 是由Linus Torvalds 亲自着手开发的,可以说在功能与性能方面无可挑剔。程序员们愿意接受Git,很大程度上取决于这个背景。
笔者在从Subversion 改用Git 时,也对其强大的功能和性能感到震惊。Git 功能多到夸张,让人觉得至今都没能彻底掌握它。同时,它大幅削减了笔者花在版本管理系统上的时间,现在如果没有Git,软件开发恐怕会是一件非常痛苦的事情。
在发布之初,Git 由于其艰涩难懂,只有部分黑客愿意使用。但随着众多开发者的共同努力,现在它已被全世界的程序员们所采用。
Tips:http://subversion.apache.org/
什么是版本管理
版本管理就是管理更新的历史记录。它为我们提供了一些在软件开发过程中必不可少的功能,例如记录一款软件添加或更改源代码的过程,回滚到特定阶段,恢复误删除的文件等。在Git 出现以前,人们普遍采用Subversion 等集中型版本管理系统,而现在Git 已经成为了主流。由于GitHub 的普及,想必世界上使用Git
的人会越来越多。因此要学习版本管理的各位,建议您选择Git。
集中型与分散型
集中型
以Subversion 为代表的集中型,会如图2.1 所示将仓库集中存放在
服务器之中,所以只存在一个仓库。这就是为什么这种版本管理系统会
被称作集中型。集中型将所有数据集中存放在服务器当中,有便于管理的优点。但
是一旦开发者所处的环境不能连接服务器,就无法获取最新的源代码,
开发也就几乎无法进行。服务器宕机时也是同样的道理,而且万一服务
器故障导致数据消失,恐怕开发者就再也见不到最新的源代码了。
分散型
图2.2 是以Git 为代表的分散型的示意图。如图中所示,GitHub 将仓库Fork 给了每一个用户。Fork 就是将GitHub 的某个特定仓库复制到自己的账户下。Fork 出的仓库与原仓库是两个不同的仓库,开发者可以随意编辑。
如图所示,分散型拥有多个仓库,相对而言稍显复杂。不过,由于本地的开发环境中就有仓库,所以开发者不必连接远程仓库就可以进行开发。
图中只显示了一般的使用流程。实际上,所有仓库之间都可以进行push 和pull。即便不通过GitHub,开发者A 也可以直接向开发者B 的仓库进行push 或pull。因此在使用前如果不事先制定规范,初学者往往会搞不清最新的源代码保存在哪里,导致开发失去控制。不过不用担心,只要各位随着本书的讲解亲自动手尝试,想掌握要领并不是一件难事。
集中型与分散型哪个更好
要说集中型与分散型哪个更好,其实双方都各有优缺点,需要看具体情况而定。不过,随着Git 与GitHub 的普及,今后使用分散型的开发者将会占绝大多数。只要规则制定得当,分散型同样能像集中型那样进行管理。
考虑到今后的各种机遇与挑战,从一开始就选择分散型,必定是各位成功路上的关键一步。
安装git
接下来就让我们在本地环境中实际安装Git,进行各种设置。
Mac 与Linux
最近的Mac 中都预装了Git。而各版本的Linux 中也都以软件包(Package)的形式提供给用户了,所以各位可以直接使用。关于这两个环境特有的详细安装方法,由于篇幅关系恕不赘述。
Windows
在Windows 环境中,最简单快捷的方法是使用msysGitA。请按照Downloads 的向导下载安装包。本书使用的版本是Git-1.8.4-preview20130916.exe。安装包下载完毕后,只要双击运行,按照向导一步步安装即可。下面我们对安装时的设定进行讲解。
tips: http://msysgit.github.io/由于太老 现在已经更换到这个了https://gitforwindows.org/这是Git的官方网站https://git-scm.com/
由于内容过于基础所以就贴一张 比较重要的 就是环境变量的设置!

Git Bash
在成功完成安装后 ,右键菜单就会有Git Bash


从名字中带有Bash 就不难猜到,Git Bash 中照搬了许多Bash 命令,习惯Linux 的人用起来会感觉比Windows 命令提示符更得心应手。借这个机会,不妨也熟悉一下Windows 的CLI(Command Line Interface,命令行界面)操作。
初始设置
下面我们对本地计算机里安装的Git 进行设置。
设置姓名和邮箱地址
首先来设置使用Git 时的姓名和邮箱地址。名字请用英文输入。
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"这个命令,会在“~/.gitconfig”中以如下形式输出设置文件。
[user]
name = Firstname Lastname
email = your_email@example.com想更改这些信息时,可以直接编辑这个设置文件。这里设置的姓名和邮箱地址会用在Git 的提交日志中。由于在GitHub 上公开仓库时,这里的姓名和邮箱地址也会随着提交日志一同被公开,
所以请不要使用不便公开的隐私信息。在GitHub 上公开代码后,前来参考的程序员可能来自世界任何地方,所以请不要使用汉字,尽量用英文进行描述。当然,如果您不想使用真名,完全可以使用网络上的昵称。
提高命令输出的可读性
顺便一提,将color.ui 设置为auto 可以让命令的输出拥有更高的可读性。\
$ git config --global color.ui auto
~/.gitconfig”中会增加下面一行。
[color]
ui = auto这样一来,各种命令的输出就会变得更容易分辨。
小结
本章中,我们从Git 诞生的背景说起,讲了版本管理系统中集中型和分散型的相关知识。然后还实际安装了Git,并进行了初始设置。如果您是一名开发者,今后使用Git 的情况必然越来越多。请务必认真进行初始设置。
第三章 使用GitHub的前期准备
本章将为各位讲解使用GitHub 前需要做的一些准备。
创建账户
首先让我们来创建GitHub 账户。请打开创建账户的页面A。我们会看到如图3.1 所示的页面。在Username 一栏中用英文和数字输入要创建的ID,您的公开页面的URL(http://github.com/ xxx)会用到这个ID。其他项目也请按照页面要求输入。
这个没什么好说的,但是现在的GitHub注册界面是真TM的酷炫

设置SSH Key
GitHub 上连接已有仓库时的认证,是通过使用了SSH 的公开密钥认证方式进行的。现在让我们来创建公开密钥认证所需的SSH Key,并将其添加至GitHub。已经创建过的读者,请用现有的密钥进行设置。
运行下面的命令创建SSH Key。
$ ssh-keygen -t rsa -C "your_email@example.com" |
“your_email@example.com”的部分请改成您在创建账户时用的邮箱地址。密码需要在认证时输入,请选择复杂度高并且容易记忆的组合。输入密码后会出现以下结果。
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa. |
本部分讲解参照了GitHub 的帮助说明(https://help.github.com/articles/generatingssh-keys)。
id_rsa 文件是私有密钥,id_rsa.pub 是公开密钥。
添加公开密钥
在GitHub 中添加公开密钥,今后就可以用私有密钥进行认证了。点击右上角的账户设定按钮(Account Settings),选择SSH Keys 菜单。点击Add SSH Key 之后,会出现如图3.2 的输入框。在Title 中输入适当的密钥名称。Key 部分请粘贴id_rsa.pub 文件里的内容。id_rsa.pub的内容可以用如下方法查看。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 公开密钥的内容 your_email@example.com
添加成功之后,创建账户时所用的邮箱会接到一封提示“公共密钥添加完成”的邮件。完成以上设置后,就可以用手中的私人密钥与GitHub 进行认证和通信了。让我们来实际试一试。
$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is fingerprint值 .
Are you sure you want to continue connecting (yes/no)? 输入yes出现如下结果即为成功。
Hi hirocastest! You've successfully authenticated, but GitHub does not
provide shell access.使用社区功能
如果您经常使用的某个软件正在GitHub 上进行开发,不妨去Watch 一下。
实际动手使用
创建仓库
实际创建一个公开的仓库。点击右上角工具栏里的New repository(图3.4)图标,创建新的仓库。

Repository name
在Repository name 栏中输入仓库的名称。这里我们输入Hello-World。
Description
Description 栏中可以设置仓库的说明。这一栏不是必需项,可以留空。
Public、Private
在这一栏可以选择Public 还是Private。这里我们选择Public,创建公开仓库,仓库内的所有内容都会被公开。
选择Private 可以创建非公开仓库,用户可以设置访问权限,但这项服务是收费的。Initialize this repository with a README
在Initialize this repository with a README 选项上打钩, 随后GitHub 会自动初始化仓库并设置README 文件,让用户可以立刻clone 这个仓库。如果想向GitHub 添加手中已有的Git 仓库,建议不要勾选,直接手动push。
Add .gitignore
下方左侧的下拉菜单非常方便,通过它可以在初始化时自动生成.gitignore 文件。这个设定会帮我们把不需要在Git 仓库中进行版本管理的文件记录在.gitignore 文件中,省去了每次根据框架进行设置的麻烦。下拉菜单中包含了主要的语言及框架,选择今后将要使用的即可。由于本书中我们并不使用任何框架,所以不做选择。
Add a license
右侧的下拉菜单可以选择要添加的许可协议文件。如果这个仓库中包含的代码已经确定了许可协议,那么请在这里进行选择。随后将自动生成包含许可协议内容的LICENSE 文件,
用来表明该仓库内容的许可协议。
输入选择都完成后,点击Create repository 按钮,完成仓库的创建。
连接仓库
下面这个URL 便是刚刚创建的仓库的页面。
https://github.com/用户名/Hello-Word |
README.md
README.md 在初始化时已经生成好了。README.md 文件的内容会自动显示在仓库的首页当中。因此,人们一般会在这个文件中标明本仓库所包含的软件的概要、使用流程、许可协议等信息。如果使用Markdown 语法进行描述,还可以添加标记,提高可读性。
GitHub Flavored Markdown
在GitHub 上进行交流时用到的Issue、评论、Wiki,都可以用Markdown 语法表述,从而进行标记。准确地说应该是GitHub FlavoredMarkdown(GFM)语法。该语法虽然是GitHub 在Markdown 语法基础上扩充而来的,但一般情况只要按照原本的Markdown 语法进行描述就可以。关于Markdown 语法的解说,网上也有相关资料可查A。各位不妨一边参考一边实际尝试。使用GitHub 后,很多文档都需要用Markdown 来书写。也就是说,全世界有大量程序员都在使用Markdown,因此掌握这种语法已经成为程序员的标准技能之一。
请各位也务必学会Markdown 语法。
公开代码
clone 已有仓库
接下来我们将尝试在已有仓库中添加代码并加以公开。首先将已有仓库clone 到身边的开发环境中。clone 时指定的路径请参考图3.6。

$ git clone git@github.com:hirocastest/Hello-World.git |
这里会要求输入GitHub 上设置的公开密钥的密码。认证成功后,仓库便会被clone 至仓库名后的目录中。将想要公开的代码提交至这个仓库再push 到GitHub 的仓库中,代码便会被公开。
现在push的话好像不能使用密码了 一般操作如下
在clone下来的git文件中有个config存储着push地址
https://你的用户名:你的密钥@github.com/用户名/仓库地址 |
编写代码
这里我们编写一个hello_world.php 文件,用来输出“Hello World!”
<?php |
这时候我们用git status 检查一下
$ git status |
由于hello_word.php 还没有添加至Git 仓库,所以显示为Untrackedfiles。
提交
将hello_word.php 提交至仓库。这样一来,这个文件就进入了版本管理系统的管理之下。今后的更改管理都交由Git 进行。
$ git add hello_world.php |
通过git add命令将文件加入暂存区,再通过git commit命令提交。添加成功后,可以通过git log命令查看提交日志。
$ git log |
tips: 专栏:公开时的许可协议即便在GitHub 上公开了源代码,也不代表著作者放弃了著作权等权利。代码的权利持有人请选择合适的许可协议。在GitHub 上,有修正BSD 许可协议、Apache 许可协议等多种许可协议供人们选择,不过大多数软件都使用MIT 许可协议。
MIT 许可协议具有以下特征。被授权人权利:被授权人有权利使用、复制、修改、合并、版发行、散布、再授权和/ 或贩售软件及软件的副本,及授予被供应人同等权利,唯服从以下义务。
被授权人义务:在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。
其他重要特性:此许可协议并非属copyleft 的自由软件许可协议条款,允许在自由及开放源代码软件或非自由软件(proprietary software)所使用。
MIT 的内容可依照程序著作权者的需求更改内容。此亦为MIT 与BSD(TheBSD license, 3-clause BSD license)本质上不同处。
MIT 许可协议可与其他许可协议并存。另外,MIT 条款也是自由软件基金会(FSF)所认可的自由软件许可协议条款,与GPL 兼容。
——MIT 许可证,Wikipedia,http://zh.wikipedia.org/,2015 年3 月27 日获取详细内容请参阅原文注
实际使用时, 只需将LICENSE 文件加入仓库, 并在README.md 文件中声明使用了何种许可协议即可。使用没有声明许可协议的软件时,以防万一最好直接联系著作者。注 http://www.opensource.org/licenses/mit-license.php
进行push
之后只要执行push,GitHub 上的仓库就会被更新。
$ git push |
这样一来代码就在GitHub 上公开了。不妨实际连接http://github.com/ 用户名/Hello-World 查看一下。Git 更加详细的操作请查阅第4 章。
小结
本章讲解了初次在GitHub 建立仓库以及公开代码的流程。完成这些,各位就踏入了GitHub 的世界。
到了这里 1-3章的内容就结束了 可以说是非常简单 手把手教学了 明早在继续更新4-6章节 敬请期待
.jpg)
.jpg)




