作者:small2
原文:segmentfault.com/a/1190000004606816
(点击文末阅读原文即可前往)
听说好的程序员都在用github。
用github有一阵子了,因为不会用Git,所以一直是通过GUI客户端程序去同步代码的,这样明显很low。而且,好多地方都没搞清楚,比如,Issue用来干什么?Pull Request怎么使用?
拒绝GUI,必须命令行。
看了《Github入门与实践》一书,经过一番梳理和实践,这次我终于懂得用Git和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 内核开发而开发的一个开放源码的版本控制软件。
Git可以帮助我们管理代码,它是一个分布式版本控制系统。它设计了仓库(版本库)这样一种管理机制;同时,不同于SVN,CVS集中式的版本控制理念,Git是分布式版本控制。
两者的区别可以阅读廖雪峰老师的文章:集中式vs分布式。
而且,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上创建一个仓库,然后上传项目代码,就实现了代码托管。
所以,一般我们的开发流程是这样的:
或者,如果是先在Github上建立了仓库,设置好了项目,那么就将远程仓库的项目克隆到本地仓库,同理。
我个人的理解是,远程仓库——操作Github;本地仓库——操作Git。
本地仓库
创建——初始化仓库
要使用Git进行版本管理,必须先初始化仓库。
提交——版本更新
编辑完代码后,一个完整的提交流程应该是:
git status
->
git add
->
git commit
。
-
git add
——加入暂存区:暂存区是提交之前的一个临时区域。
git add
将其加入暂存区,为保存到工作树中做准备。
此时再运行
git status
,提示“Change to be committed”,说明是提交状态。
-
git commit
——保存仓库的历史记录:将刚刚的提交状态保存,这样就算完成了一个版本控制。
-m 参数后的字符串称作提交信息,是对这个提交的描述。
查看——仓库状态
远程仓库
准备
创建——建立远程仓库
-
创建:
-
仓库配置:
-
如果想向Github添加手中已有的Git仓库,建议不要勾选
Initialize this repository with a README
选项;
-
Add.gitignore:可以在初始化时生成.gitignore文件,这个设定会帮我们把不需要在Git仓库中进行版本管理的文件记录在.gitignore文件中,省去了每次根据框架进行设置的麻烦。若不使用任何框架,则可不选择。
-
Add a license:选择要添加的许可协议文件,一般可不选。
-
创建成功:
克隆——获取远程仓库
当你是先在Github上创建好项目仓库时,此时需要把远程仓库克隆到本地,创建一个本地仓库。
执行git clone命令后,我们会默认处于master分支下,同时系统会自动将origin设置成该远程仓库的标识符(即origin代表了该远程仓库)。
同步——更新代码(从本地仓库传到远程仓库)
当在本地完成好编程作业时,此时需要将代码同步到远程仓库,以实现托管。
同步——更新代码(从远程仓库拉到本地仓库)
当你的队友将完成了编程作业,将其代码推送到远程仓库后,此时,你可能需要将代远程仓库队友更新后的代码拉到本地,这时要用到