Github入门与实践

听说好的程序员都在用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是一个网站。

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目录里存着管理当前目录内容所需的仓库数据。我们将这个目录的内容成为“附属于该仓库的工作树”。

  1. 查看仓库状态。

工作树和仓库在被操作过程中,状态会不断变化,所以需要经常用gti status查看当前状态。

提交——版本更新

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

  1. git status——查看仓库状态:

Untracked files表示修改过的文件尚未追踪,即尚未成为仓库的管理对象(加入到工作树中)。

  1. git add——加入暂存区:暂存区是提交之前的一个临时区域。git add将其加入暂存区,为保存到工作树中做准备。

此时再运行git status,提示“Change to be committed”,说明是提交状态。

  1. 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:选择要添加的许可协议文件,一般可不选。
  1. 创建成功:

克隆——获取远程仓库

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

  1. 复制HTTPS链接:
  1. 打开Git Bash,进入要作为仓库的文件目录:


  2. 运行命令:git clone https://github.com/Monkey626/test.git

  3. 克隆成功:

  1. 进入仓库:查看当前仓库分支信息。


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

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

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

  1. 添加远程仓库:你需要将远程仓库与本地仓库连接起来,我们用git remote add命令来设置本地仓库的远程仓库。
  1. 推送至远程仓库:如果想将当前本地仓库分支下的内容推送给远程仓库,要用git push命令。假定我们在master分支(如果是其他分支,最后的参数就改为其它分支对应名称)下操作

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

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

  1. 运行命令行git pull
  1. 拉取成功:

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:提交修改

  1. Push:要从Github发送Pull Ruquest,Github端的仓库必须有一个包含了修改后代码的分支。所以,要创建本地特性分支的相应远程分支。
  1. Send:发送Pull Request。


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

Wiki

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

所有有权限的人都可以对文中进行修改。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容