购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 实践:GitHub

Git已经成为程序员必备技能之一,而GitHub作为流行的Git仓库托管平台,不仅提供Git仓库托管,还是一个非常优秀的技术人员社交平台,技术人员可以通过开源的项目进行协作、交流,是现在优秀的工程师必须娴熟运用的方法。

本节从GitHub的历史入手,介绍Git安装、创建仓库、Fork、社会化、命令行开发,到最后的图形化工具的使用。让读者不仅掌握GitHub命令行使用方法,也学会图形化使用方法。

1.5.1 GitHub简介

Git是一个优秀的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状态可以是不同的文件,也可以是不同的文件内容。在一个分布版本控制系统中,每个用户都有一份完整的源代码(包括源代码所有的历史记录信息),可以对这个本地的数据进行操作。分布版本控制系统不需要一个集中式的代码仓库。

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名GitHub。

GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过百万,托管版本数量也非常多,其中不乏知名开源项目Ruby on Rails、jQuery等。

GitHub之所以如此受欢迎,它的优势是不容忽视的。

(1)GitHub只支持Git格式的版本库托管,而不像其他开源项目托管平台还对CVS、SVN、Hg等格式的版本库进行托管。GitHub 的哲学很简单,既然 Git 是最好的版本控制系统之一(对于很多喜欢Git和GitHub的人没有之一),没有必要为兼顾其他版本控制系统而牺牲Git某些独有特性。因此没有支持其他版本控制系统的历史负担,是GitHub成功的要素之一。

(2)GitHub对Git版本库提供了完整的协议支持,支持HTTP智能协议、Git-daemon、SSH协议。

(3)GitHub 提供在线编辑文件的功能,不熟悉 Git 的用户也可以直接通过浏览器修改版本库里的文件。

(4)将社交网络引入项目托管平台是GitHub的创举。用户可以关注项目、关注其他用户进而了解项目和开发者动态。

(5)项目的Fork和Pull Request构成GitHub最独具一格的工作模式。对提交代码的逐行评注及Pull Request构成GitHub特色的代码审核。

(6)GitHub 通过私有版本库托管、面向企业的版本库托管和项目管理平台、人员招聘等付费服务获得了商业上的成功,这种成功使GitHub不必以页面中嵌入广告的方式维持运营,最大的受益者还是用户。

(7)GitHub网站采用Ruby on Rails架构,在Web设计中运用了大量的JavaScript、AJAX、HTML 5等技术,支持对使用Markdown等标记语言的内容进行渲染和显示等。关注细节使得GitHub成为了项目托管领域的后起之秀。

1.5.2 使用GitHub

1.GitHub注册

使用GitHub,第一步是注册GitHub账号。

(1)首先登录GitHub官网进行注册。

(2)在打开的页面中单击“Sign up now”注册。

(3)在接下来的页面中创建用户名,填写E-mail和设定密码,单击“Create an account”按钮创建账户。

(4)选择账户类型,这里默认选择“Free”类型,单击“Finish sign up”按钮完成注册。

2.安装Git

(1)下载并安装Git最新版本。

(2)安装完成后,打开Terminal命令(针对iOS系统用户)或者命令提示行(针对Windows和Linux用户)。

(3)提供给Git用户的姓名,以便用户的提交能被正确地标记。在$后输入下面的内容:

$ git config --global user.name "YOUR NAME"

(4)提供给Git邮箱地址,以便与用户的Git提交进行关联。用户指定的邮箱要和邮箱设置里相同。如何保持用户的邮箱地址隐藏,请参考:保持你的邮箱地址私有。

$ git config --global user.email "YOUR EMAIL ADDRESS"

3.通过Git验证GitHub

当用户通过Git连接到一个GitHub仓库后,用户需要验证GitHub,下面是两种验证方法。

(1)通过HTTPS建立连接(推荐)

选择HTTPS方式,用户可以用一个证书小帮手把GitHub密码缓存在Git。

(2)通过SSH建立连接

选择SSH方式,用户需要在计算机中生成SSH keys,用来从GitHub中push或pull。

4.在GitHub上创建一个新仓库

(1)在任意的页面右上角单击+,然后单击新建仓库“New repository”,如图 1.16所示。

(2)为仓库创建一个简短便于记忆的名字。例如“hello-world”,如图1.17所示。

图1.16 新建仓库

图1.17 创建名字

(3)为仓库添加一个描述(非必需的)。例如“My first repository on GitHub”,如图1.18所示。

(4)选择仓库类型。仓库类型分为公有(Public)或者私有(Private),具体如下。

图1.18 为仓库添加描述

① Public:公有仓库对于刚入门的新手来说是不错的选择。这些仓库在GitHub上对于每个人是可见,用户可以从协作型社区中受益。

② Private:私有仓库需要更多地步骤。它们只对于用户来说是可用的,这个仓库的所有者属于用户和及其指定要分享的合作者,私有仓库仅仅对付费账户可用。更多的信息请参照“What plan should I choose?”。

本例选择“Public”,如图1.19所示。

图1.19 选择仓库类型

(5)选择初始化文件。选择“Initialize this repository with a README”,如图1.20所示。

图1.20 选择初始化文件

(6)完成创建仓库。单击“Create repository”,完成创建一个仓库。

第一个仓库成功创建,并且通过README文件进行了初始化。

5.提交第一个更改

一个提交就像项目里的文件在一个特定时间点上的快照一样。

当创建了一个新仓库,通过README文件初始化。README文件里有关于这个项目的详细解释,或者添加一些关于如何安装或者使用该项目的文档。README文件的内容会自动地显示在仓库的首页。

以下提交一个对README文件的修改。

(1)在仓库的文件列表,单击README.md文件,如图1.21所示。

(2)在文件内容的上方,单击“编辑”按钮。

(3)在Edit file标签上,输入一些关于用户的信息,如图1.22所示。

图1.21 单击README.md文件

图1.22 输入用户的信息

(4)在新内容的上方,单击“Preview changes”,如图1.23所示。

(5)检查用户对这个文件进行的更改,会看到新的内容被绿色标记,如图1.24所示。

图1.23 预览

图1.24 新的内容

(6)在页面的底部,即 "Commit changes" 下方,输入一些简短、有意义的提交信息来解释用户对这个文件所进行的修改,如图1.25所示。

图1.25 注释修改

(7)单击“commit changes”,完成提交。

6.Fork一个示例仓库

Fork是对一个仓库的复制。复制一个仓库允许自由试验各种改变,而不影响原始的项目。

一般来说,Fork 被用于更改别人的项目(贡献代码给已经开源的项目)或者使用别人的项目作为用户想法的初始开发点。

(1)一种方式是更改别人的项目。使用Fork提出改变的一个很好的例子是漏洞修复。与其记录一个发现的问题,不如采用如下方式。

Fork这个仓库;

进行修复;

向这个项目的拥有者提交一个pull requset;

如果这个项目的拥有者认同这些成果,他们可能会将这些修复更新到原始的仓库中。

(2)另一种方式是使用别人的项目作为用户想法的初始开发点。开源的核心是共享代码,我们可以制作更好、更可靠的软件。

事实上,当用户在GitHub上创建一个仓库时,可以选择自动包含一个许可文件,这个文件决定用户是否希望将项目分享给其他人。

Fork一个仓库分为两步,如下所示。

① 在GitHub上,定位到octocat/Spoon-Knife仓库。

② 在页面右上角,单击“Fork”按钮,如图1.26所示。

这样就已经Fork这个原始的octocat/Spoon-Knife仓库。

7.同步Fork仓库

图1.26 Fork一个仓库

在Fork一个项目为了提交更改向upstream或原始仓库的情况下,已经很好地实现了将upstream仓库定期同步到Fork。要做到这一点,需要在命令行中使用Git,可以使用刚Fork的octocat/Spoon-Knife仓库去练习设置upstream仓库。

(1)第一步:安装Git。

(2)第二步:为Fork的仓库创建一个本地克隆。

如此即成功Fork Spoon-Knife仓库,但在用户的计算机上并没有这个仓库的文件。接下来复制Fork的代码到本地的计算机上。

① 在GitHub上,定位到Fork的Spoon-Knife仓库。

② 在Fork的仓库页面的右侧边栏,单击复制图标复制Fork的URL。

③ 打开Terminal命令(针对苹果系统用户)或者命令提示行(针对Windows和Linux用户)。

④ 输入git clone,然后粘贴在步骤②复制的URL,用GitHub的用户名代替YOUR-USERNAME。

$ git clone https://github.com/YOUR-USERNAME/Spoon-Knife

⑤ 按回车键,本地克隆就创建好了。

$ git clone https://github.com/YOUR-USERNAME/Spoon-Knife

Cloning into 'Spoon-Knife'...

remote: Counting objects: 10, done.

remote: Compressing objects: 100% (8/8), done.

remove: Total 10 (delta 1), reused 10 (delta 1)

Unpacking objects: 100% (10/10), done.

(3)第三步:通过配置Git来同步Fork的原始Spoon-Knife仓库。

如果Fork一个项目是为了提出更改这个原始的仓库,可以配置Git将原始的或者upstream的变化更改到本地。

① 在GitHub上,定位到octocat/Spoon-Knife仓库。

② 在这个仓库页面的右侧边栏,单击复制图标复制这个仓库的URL。

③ 打开Terminal命令(针对Mac用户)或提示命令行(Windows和Linux用户)。

④ 更改到步骤②(创建一个本地)创建的Fork的本地目录。

回到根目录,只输入cd。

输入ls,列出当前目录的文件和文件夹。

输入“cd目录名”进入输入的目录下。

输入“cd ..”回到上一目录。

⑤ 输入git remove -v,按回车键,将会看到Fork当前配置的远程仓库:

$ git remote -v

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

⑥ 输入git remote add upstream,然后粘贴步骤②复制的URL并按下回车键。

$ git remote add upstream https://github.com/octocat/Spoon-Knife.git

⑦ 验证Fork里新指明的这个upstream仓库,再次输入git remote -v。将会看到Fork的URL作为原始的地址,而原始的仓库的URL作为upstream。

$ git remote -v

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)

upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

接以上操作,可以利用几个Git命令保持Fork与upstream的仓库的同步。

1.5.3 GitHub界面总览

本小节介绍GitHub界面的总体功能,如图1.27所示。

图中标记的序号含义如下。

(1)进入GitHub主页的按钮。

(2)搜索框,用户可以在这里搜索一些开源项目。

(3)用户的头像,可以在设置里面进行设置。

(4)用户的昵称(账号名称),用户可以在设置中设置昵称。

(5)提示用户添加一个类似于个人描述或个性签名的东西。

(6)这是用户加入GitHub的时间。

(7)此处有三个数据:Followers,追随(关注)你的人;Starred,你点赞(Star)的项目;Following,你追随(关注)的人。

(8)Pull requests:即其他人向用户的仓库提交合并请求。

(9)Issues:即其他人对用户的项目提的问题。

图1.27 GitHub界面总体功能

(10)Gist:代码片段。

(11)系统给用户的提示消息,提示用户去编辑自己的资料。

(12)用户每天的贡献度。

(13)用户的项目仓库。

(14)用户平时的活动或动态,例如在哪个项目做了提交等。

(15)用户每天向GitHub提交的贡献的分布图。

(16)由于新账户还没有贡献,所以列出了官方对于贡献的解释,帮助新手理解。

(17)创建新仓库或新组织的按钮,单击按钮会弹出菜单。

(18)与用户相关的一个按钮,单击后会有一个与用户相关的菜单。

读者可以参考相关的专业书籍详细了解更多相关知识。 xEu3SZ3zivaaz2QZ7Mbv1T0KtaDTEBVL049jYHWfaD5l6UR1I04cTEcDOVYOIuEt

点击中间区域
呼出菜单
上一章
目录
下一章
×