GIT简明教程

Github是目前世界上最先进的分布时版本控制系统。我们可以借助它来托管我们的项目。可以说Github是程序员必不可少的高效工具,事实上,我的博客网站正是借助Github来发布到网上的。既然Github如此重要,下面我就来介绍一下Github以及它的基础使用吧。

Github是一种分布式版本控制系统,极大的方便了开发者们存储项目以及多人开发。开发者们可以将项目上传到Github托管,然后团队中不同的人可以将项目下载到本地进行修改,完成后再将其传回到Github上,所有的修改日志都会显示在Github上,这样就极大的方便了团队共同开发项目。Github也是一个非常大的开源社区,开发者们可以在这里将自己的代码发布出来供其它人观看和使用,Github用户可以查看、星标、Fork各种各样的项目,这样的社区方便了开发者们的交流,促进了项目的发展,帮助了学者学习代码。

I. GITHUB基础概念

下面我们首先来介绍一下Github的基础概念。

仓库(Repository)

仓库是用来存放项目代码的地方,每个项目对应一个仓库,每个Github用户可以有多个仓库。开发者们也可以对别人的项目进行关注(Watch)、收藏(Star)、复制克隆(Fork)、发起请求(Pull Request)、发送事务卡片(Issue)。下面我们来一一解释这些概念。

关注(Watch):如果一个开发者关注了别人的项目,那么他将会收到项目的修改、更新等信息的通知。

收藏(Star):如果一个开发者收藏了别人的项目,那么他就可以在自己的Github主页上找到这个项目的链接。

复制克隆项目(Fork):如果一个开发者Fork了别人的仓库,那么这个仓库就会被复制到他的Github主页上,复制的仓库和原仓库是彼此独立的,开发者对复制到自己主页的仓库内容进行修改不会影响到原仓库内的项目。

发起请求(Pull Request):发起请求是基于Fork之上的。当一个开发者Fork了别人的仓库内的项目,加以修改后想要通知原项目的Git用户代码在他的修改下被优化了,希望原用户将原项目改为他修改后的版本,就可以发送Pull Request申请。如果原项目的用户同意了,那么原项目就会被修改成新的版本。

发送事务卡片(Issue):当一个开发者在查看别人仓库中的项目时发现了bug,可以在仓库中发送Issue来和项目开发者进行交流。

II. GIT工作原理

[图片上传失败...(image-1080a-1643314930218)]
](https://upload-images.jianshu.io/upload_images/646931-fd8b551bbff6c881.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下面我来介绍一下Git的工作原理。如上图所示,Git仓库分为本地和远程仓库两个部分,本地部分又分为三个区域:工作区(workingspace)、缓存区(index)和仓库区(repository)

  • 工作区(workingspace):工作区就是我们本地对项目修改的区域
  • 缓存区(index):当修改完成后,我们可以将修改的内容上传,为了避免传入之后又想修改,Git会让修改的文件首先传入缓存区
  • 本地仓库区(local repository):当我们确定所有修改都已完成的时候,就可以将缓存区内的所有文件传入到Git本地仓库;
  • 远程仓库区(remote repository): 最后,我们再将本地仓库的文件传到远程仓库即可
git原理2

上传代码流程

  1. 使用命令git clone url(仓库地址)将项目从远程仓库下载到本地。
   git clone url

  1. 修改项目代码。

  2. 使用命令git add xxx (要添加的文件,”.“代表所有文件)将指定文件从工作区传入缓存区。

   git add xxx

  1. 使用命令git commit -m ‘描述’将缓存区内的所有文件传入Git本地仓库。
   git commit -m '描述'

  1. 使用命令git remote add origin url(远程项目地址) 将Git本地仓库和Git远程仓库连接起来。
   git remote add origin url

  1. 使用命令git push -u origin master 将Git本地仓库内的项目上传到Git远程仓库。
   git push -u origin master

从远程更新本地代码

git pull # 相当于 git fetch + git diff

III. 常用命令

  1. 首次在本地使用git时,需要将本地与git账户进行关联,可以使用命令:
   git config --global user.name "username"
   git config --global user.email "useremail@xxx.com"

  1. 当我们想要清除缓存区的某个内容或全部内容时,可以使用命令:
   git rm -r --cached xxx
   git rm -r --cached .

  1. 当我们想要查看文件的状态时可以使用命令:
   git status

  1. 当我们想要删除remote origin时可以使用命令:
   git remote rm origin

  1. 如果项目还从未传入到git,那么需要在项目目录下使用以下命令将项目初始化为git项目
   git init

  1. 如果想直接删除仓库内的文件,可以使用命令:
   git rm xxx       //删除文件
   git rm -r xxx    //删除文件夹

IV. GIT分支

在协同开发的工程中,我们往往是不同程序员负责不同的项目模块,同时进行开发。为了保证每个人的代码不受其他人更改的影响,我们可以创建不同的分支进行开发,然后最终再将这些分支合并起来。

  1. git分支中的常用指令:
# 列出所有本地分支 
git branch

# 列出所有远程分支 
git branch -r

# 新建一个分支,但依然停留在当前分支 
git branch [branch-name]

# 新建一个分支,并切换到该分支 
git checkout -b [branch]

# 合并指定分支到当前分支 
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name] 
$ git branch -dr [remote/branch]

Note: 如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建 的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

  1. git分支命名规范

    分支 命名 说明
    主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分支上发布
    开发主分支 dev 开发分支,永远是功能最新最全的分支
    功能分支 feature-* 新功能分支,某个功能点正在开发阶段
    发布版本 release-* 发布定期要上线的功能
    修复发布版本分支 bugfix-release-* 修复测试bug
    紧急修复分支 bugfix-master-* 紧急修复线上代码的 bug
  • 主分支 Master

    代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 主分支必须是可用的、稳定的、可直接发布的版本,不能直接在主分支上开发。

  • 开发主分支Dev

    Master主分支只用来发布重大版本,日常开发应该在另一个分支上完成,我们把开发用的分支,叫做Dev。 这个分支可以用来生成代码的最新隔夜版本(nightly)。 如果想正式对外发布,就在Master分支上对Dev分支进行合并(merge)。 Dev分支代码永远是最新的,所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上开发。

  • 功能分支Feature

    功能分支的名字,可以采用feature-*的形式命名,以自己开发的功能命名。 功能分支是分配开发不同的功能用的,从Dev创建功能分支,然后完成相应功能开发后合并回Dev分支并删除该功能分支

  • 预发布分支Release

    预发布分支名字,可以采用release-*的形式命名 预发布分支是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。 预发布分支是从Dev分支上分出来的,预发布结束之后(即测试没有问题之后),必须合并进Dev和Master。

  • 修复预发布分支Release-bug

    修复预发布分支的bug,可以采用release-bug-*的形式命名 在预发布版本测试出现bug时,从release分支创建分支进行bug修复,bug修复完成后在合并会release分支

  • 紧急修补分支Bug

    修补分支的名字,可以采用bugfix-master-*的形式。 该分支是为了紧急修复线上的bug。 软件正式发布之后,难免会出现bug。这时就需要创建一个分支,进行bug修补。 修补bug分支是从Master分支上面分出来的。修补结束之后,再合并进Master和Dev分支。 尽量避免线上问题的出现

    Note:一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发. feature分支申请合并之前,最好先pull一下dev分支下来,看一下有没有冲突,如果有冲突就先解决冲突后再合并回dev

V. IDEA使用GIT

IDEA中可以直接使用Git取代Git命令,使得用Git开发变得更加轻松便捷。

IV. GITPAGE

此外,我们还可以使用Github来托管静态网页。步骤如下:

  1. 建立一个项目仓库,名字为username.github.io
  2. 将网页代码上传到这个仓库中,在项目根目录下必须包括index.html文件。

这样就成功将我们的静态网页托管到了Github上。访问的地址为username.github.io。如果你想使用自己的域名,请等待本博客的下次更新。

V. 总结

Github是一个功能强大的分布式控制系统,我们可以借助它来托管项目,从来实现储存和多人分布式开发,这样极大的提高了我们开发项目的效率。可以说Github是每一个开发者必不可少的工具,这篇文章介绍了Github最基本的使用方法,深层次的东西还等待着大家自己的开发。

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

推荐阅读更多精彩内容

  • Git介绍及基本概念 分布式版本控制系统 Git是一个分布式版本控制系统,每个本地保留远程仓库的完整副本,在本地可...
    健四郎阅读 297评论 0 0
  • Git简明教程 1. git四大域 git四大域:工作目录,暂存区,仓库,远程仓库。git对文件的操作都是在四大域...
    lavor阅读 11,071评论 27 435
  • 姓名:宫松涛 学号:19021210927 嵌牛导读:在日常工作中,经常看到Git。但是对于新人来讲,刚上来很陌生...
    走不完的叉路口阅读 297评论 0 0
  • git是目前很强大且应用最广泛的版本控制系统。本文对git中最常用的操作命令做了一些总结。 配置ssh 使用htt...
    mqstack阅读 357评论 0 0
  • 初识 Git 写在前面: 注册github账号 > 新建一个仓库 > 创建一个token > 熟悉github界面...
    青衫不是山阅读 214评论 0 0