Github入门与实践

据说好的程序员都在用github。html

用github有一阵子了,由于不会用Git,因此一直是经过GUI客户端程序去同步代码的,这样明显很low。并且,好多地方都没搞清楚,好比,Issue用来干什么?Pull Request怎么使用?git

拒绝GUI,必须命令行。程序员

看了《Github入门与实践》一书,通过一番梳理和实践,此次我终于懂得用Git和Github了。github

思惟导图

图片描述

Git

Git是什么?

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
[译:Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。]编程

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。markdown

Git能够帮助咱们管理代码,它是一个分布式版本控制系统。它设计了仓库(版本库)这样一种管理机制;同时,不一样于SVN,CVS集中式的版本控制理念,Git是分布式版本控制。框架

二者的区别能够阅读廖雪峰老师的文章:集中式vs分布式ssh

并且,Git是经过命令行操做的。分布式

基本操做

这里只简单罗列几条命令,具体操做在下面经过Git建立本地仓库会介绍到。工具

  • git init:初始化仓库

  • git status:查看仓库状态

  • git add:向暂存区中添加文件

  • git commit:保存仓库的历史记录

  • git log:查看提交日志

  • git diff:查看更改先后的差异

  • git branch:显示分支一览表

  • git checkout -b:建立并切换分支

  • git checkout:切换分支

  • git merge:合并分支

  • git reset:回溯历史版本

  • git remote add:添加远程仓库

  • git push:推送至远程仓库

  • git clone:获取远程仓库

分支

在进行多个并行做业时,咱们会用到分支。

master分支是Git默认建立的分支,它就像河流的主干,而咱们根据须要,建立的一个个分支,就至关于河流分化出来的一个个小分流。

咱们在分支上进行编程做业(例如,每一个负责项目的一个模块开发),当完成以后,进行审核无误,再合并到主分支master上,这样就能合理高效地实现多人并行开发。

特性分支

特性分支,是集中实现单一特性(主题),除此以外不进行任何做业的分支。

在平常开发过程当中,咱们经常会建立数个特性分支,同时在保留一个随时能够发布软件的稳定分支。稳定分支的角色一般由master担当。

假设咱们建立了一个feature-a分支,这一分支主要实现feature-a,除feature-a的实现以外不进行任何做业。即使在开发过程当中发现了Bug,也须要再建立新的分支,在新分支中进行修正。

Github

Github是什么?

Github是一个网站。
图片描述

一些开发者在使用Git之后,找不到好的Git托管网站,因而Tom Preston Werner 和 Chris Wanstrath 就开发了Github出来,提供Git仓库托管服务。

因此,在我看来,它们二者的关系就是:Git是一个系统,至关于一个工具,而Github就是基于这样一个系统的平台,让开发者更高效地使用Git去托管本身的代码。

如何使用Github?

由于Git是使用仓库进行版本控制的,因此咱们在Github的操做也是围绕着仓库展开。

当咱们想管理一个项目的代码时,咱们就在Github上建立一个仓库,而后上传项目代码,就实现了代码托管。

因此,通常咱们的开发流程是这样的:

  1. 在本地经过Git创建一个仓库,咱们称之为“本地仓库”,而后进行咱们的编程工做。使用Git,能够帮助实现版本控制。

  2. 在Github上创建一个仓库,咱们称之为“远程仓库”,而后将本地仓库的内容推送到远程仓库,同步代码,这样就实现了托管功能。

或者,若是是先在Github上创建了仓库,设置好了项目,那么就将远程仓库的项目克隆到本地仓库,同理。

我我的的理解是,远程仓库——操做Github;本地仓库——操做Git。

本地仓库

建立——初始化仓库

要使用Git进行版本管理,必须先初始化仓库。

  1. 创建一个目录,并初始化仓库。图片描述
    若是初始化成功,执行了git init命令的目录下就会生成.git目录。这个.git目录里存着管理当前目录内容所需的仓库数据。咱们将这个目录的内容成为“附属于该仓库的工做树”。

  2. 查看仓库状态。图片描述
    工做树和仓库在被操做过程当中,状态会不断变化,因此须要常常用gti status查看当前状态。

提交——版本更新

编辑完代码后,一个完整的提交流程应该是:git status -> git add -> git commit

  1. git status——查看仓库状态: 图片描述
    Untracked files表示修改过的文件还没有追踪,即还没有成为仓库的管理对象(加入到工做树中)。

  2. git add——加入暂存区:暂存区是提交以前的一个临时区域。git add将其加入暂存区,为保存到工做树中作准备。图片描述此时再运行git status,提示“Change to be committed”,说明是提交状态。

  3. git commit——保存仓库的历史记录:将刚刚的提交状态保存,这样就算完成了一个版本控制。图片描述
    -m 参数后的字符串称做提交信息,是对这个提交的描述。

查看——仓库状态

  1. git log——查看提交日志:查看以往仓库中提交的日志,什么人在何时进行了提交或合并,以及操做先后有怎样的差异。
    图片描述

  2. git diff——查看更改先后的差异:查看工做树、暂存区、最新提交之间的差异。

    • 查看工做树和暂存区的区别:在test.html中写点东西,先不用git add,直接运行git diff查看,此时显示的是工做树与最新提交状态之间的差异。图片描述

    • 查看工做树与最新提交的差异:先执行git add将修改提交到暂存区;若是此时执行git diff,会发现没有任何显示,这是由于执行了git add后工做树和暂存区的状态并没有差异。要查看与最新提交的差异,要执行git diff HEAD图片描述

远程仓库

准备

  1. 建立帐户:若是你尚未Github帐户,那么你须要先建立一个帐户
    登陆后,便可使用Github的功能,建立仓库。图片描述

  2. 设置SSH Key:Github上仓库与本地仓库链接,是经过使用了SSH的公开秘钥认证方式进行的。因此,得如今本地生成SSH Key,而后设置到Github上,才能实现仓库的远程链接。

    • 打开Git Bash,建立SSH Key。
      运行命令:ssh-keygen -t rsa -C "your_email@example.com"图片描述 输入密码后,会出现如下结果,代表建立成功:图片描述 id_rsa是私有密钥,id_rsa.pub是公开密钥。

    • 在Github中添加公开密钥。图片描述图片描述

建立——创建远程仓库

  1. 建立:
    图片描述

  2. 仓库配置:
    图片描述

    • 若是想向Github添加手中已有的Git仓库,建议不要勾选Initialize this repository with a README选项;

    • Add.gitignore:能够在初始化时生成.gitignore文件,这个设定会帮咱们把不须要在Git仓库中进行版本管理的文件记录在.gitignore文件中,省去了每次根据框架进行设置的麻烦。若不使用任何框架,则可不选择。

    • Add a license:选择要添加的许可协议文件,通常可不选。

  3. 建立成功:
    图片描述

克隆——获取远程仓库

当你是先在Github上建立好项目仓库时,此时须要把远程仓库克隆到本地,建立一个本地仓库。

  1. 复制HTTPS连接:图片描述

  2. 打开Git Bash,进入要做为仓库的文件目录:图片描述

  3. 运行命令:git clone https://github.com/Monkey626/test.git图片描述

  4. 克隆成功:图片描述

  5. 进入仓库:查看当前仓库分支信息。图片描述

执行git clone命令后,咱们会默认处于master分支下,同时系统会自动将origin设置成该远程仓库的标识符(即origin表明了该远程仓库)。

同步——更新代码(从本地仓库传到远程仓库)

当在本地完成好编程做业时,此时须要将代码同步到远程仓库,以实现托管。

  1. 添加远程仓库:你须要将远程仓库与本地仓库链接起来,咱们用git remote add命令来设置本地仓库的远程仓库。 图片描述

  2. 推送至远程仓库:若是想将当前本地仓库分支下的内容推送给远程仓库,要用git push命令。假定咱们在master分支(若是是其余分支,最后的参数就改成其它分支对应名称)下操做
    图片描述图片描述

同步——更新代码(从远程仓库拉到本地仓库)

当你的队友将完成了编程做业,将其代码推送到远程仓库后,此时,你可能须要将代远程仓库队友更新后的代码拉到本地,这时要用到git pull命令。

  1. 运行命令行git pull图片描述

  2. 拉取成功:图片描述

Github几大功能

Issue

在软件开发过程当中,开发者们为了跟踪BUG及进行软件相关讨论,进而方便管理,建立了Issue。

在Github上,能够将它做为开发者之间的交流工具,多多加以利用。

Issue能够在如下状况使用:

  • 发现软件的Bug并报告;

  • 有事想向做者询问、探讨;

  • 事先列出从此准备实施的任务。

Issue支持markdown语法,也支持添加标签便于管理。

在Issue里能够添加图片,可使用表情。

Pull Request

Pull Request是用户修改代码后向对方仓库发送采纳请求的功能,也是Github的核心功能。

Pull Request的流程:

  1. Fork:将你要修改代码的项目仓库Fork到本身的Github帐号上,建立一个属于你的仓库;图片描述图片描述

  2. Clone:将其clone到本地 图片描述

  3. Branch:在本地仓库建立一个特性分支(有了更明确的主题,也便于对方了解本身修改代码的意图),用于本次代码修改。 图片描述

  4. Commit:提交修改 图片描述

  5. Push:要从Github发送Pull Ruquest,Github端的仓库必须有一个包含了修改后代码的分支。因此,要建立本地特性分支的相应远程分支。 图片描述图片描述图片描述

  6. Send:发送Pull Request。 图片描述图片描述图片描述

这样,就是一个完整的发送Pull Request流程。

Wiki

Wiki是一个使用简单的语法就能编写文档的功能。

全部有权限的人均可以对文中进行修改。

Wiki多被用于编写博客文章、教程、使用手册。

相关文章
相关标签/搜索