git学习

一、背景(当成故事去读)

Linus 虽然创建了 Linux,但 Linux 的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为 Linux 编写代码,那 Linux 的代码是如何管理的呢?

  事实是,在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!

于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。

开发 Samba 的 Andrew 试图破解 BitKeeper 的协议(这么干的其实也不只他一个),被 BitMover 公司发现了,于是 BitMover 公司收回 Linux 社区的免费使用权。

Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 系统的源码已经由 Git 管理了!牛是怎么定义的呢?大家可以体会一下。

  Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。

  历史就是这么偶然,如果不是当年 BitMover 公司威胁 Linux 社区,可能现在我们就没有免费而超级好用的 Git 了。

二、是什么?(定义/概念)

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

  • 工作区(Working Directory

    就是你在电脑里能看到的目录,比如上文中的 gafish.github.com 文件夹就是一个工作区

  • 本地版本库(Local Repository

    工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • 暂存区(stage

    本地版本库里存了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD

  • 远程版本库(Remote Repository

    一般指的是 Git 服务器上所对应的仓库,github`仓库就是一个远程版本库

  • 工作区暂存区本地版本库远程版本库之间几个常用的 Git 操作流程如下图所示:

  • 分支(Branch

    分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,所以在同一个数据库里可以同时进行多个不同的修改

  • 主分支(Master

    前面提到过 masterGit 为我们自动创建的第一个分支,也叫主分支,其它分支开发完成后都要合并到 master

  • 标签(Tag

    标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:publish/0.0.1),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动,参见上图中的1.0 / 2.0 / 3.0

  • HEAD

    HEAD 指向的就是当前分支的最新提交

四、怎么样用?(方法)

  • git clone:从服务器拉取代码(克隆)
  • git config:配置开发者用户名和邮箱
  • git branch
    • git branch daily/0.0.0 : 创建分支
    • git branch -m daily/0.0.0 daily/0.0.1 :重命名分支
    • git branch :查看当前项目的分支列表
    • git branch -d daily/0.0.1:删除分支
  • git checkout:切换分支
  • git status:查看文件变动状态
  • git add:添加文件变动到暂存区
  • git commit :提交文件变动到版本库
  • git push:将本地的代码推送到服务器
  • git pull :将服务器上的最新代码拉取到本地
  • git log :查看版本提交记录
  • git tag:为项目标记里程碑

六、特点(优点、合同类型之间的区别)

  • 集中式(CVS、SVN)和分布式(Git)
 集中式版本控制系统:版本集中存放在中央服务器,使用的时候先down,改完再提交。(我之前也用SVN,没有网是没办法提交的,局域网效率还好,如果是外网而且网速还不好,那真是shei用shei知道!不要不要的!)

分布式版本控制系统:

        首先,分布式版本控制系统根本没有中央服务器,每个电脑上都是完整的版本,如果多人协作开发,只要推送各自的修改就行了。但是人多的话,一般还是会有一台充当中央服务器,单纯是为了方便大家修改。

        拥有一个强大的分支管理系统

七、git使用规范

阮一峰: http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

八、git教程(很全很受用)

廖雪峰: https://www.liaoxuefeng.com/wiki/896043488029600/900062620154944

一篇文章搞定git的更多相关文章

  1. 一篇文章搞定Git——Git代码管理及使用规范

    一篇文章搞定Git--Git代码管理及使用规范   https://blog.csdn.net/weixin_42092278/article/details/90448721

  2. 一篇文章搞定百度OCR图片文字识别API

    一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104

  3. 一篇文章搞定JS类型转换

    啥要说这个东西?一道面试题就给我去说它的动机.题如下: var bool = new Boolean(false); if (bool) { alert('true'); } else { alert ...

  4. 一篇文章搞定 Nginx 反向代理与负载均衡

    代理 要想弄明白反向代理,首先要知道啥是正向代理,要搞懂正向代理只需要知道啥是代理即可.代理其实就是一个中介,在不同事物或同一事物内部起到居间联系作用的环节.比如买票黄牛,房屋中介等等. 在互联网中代 ...

  5. 一篇文章搞定Selenium元素定位/封装/数据驱动

    小伙伴都知道,自动化最重的,又最"难"(因为实战中会碰到定位的各种坑)那就是定位元素.如果不熟练掌握定位,那只怕你比功能测式的小伙伴下班还会要晚!扎心了吧! Selenium常用定 ...

  6. 一篇文章搞定css3 3d效果

    css3 3d学习心得 卡片反转 魔方 banner图 首先我们要学习好css3 3d一定要有一定的立体感 通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了. 首先先给大家看一个小例子: 卡 ...

  7. Python正则表达式很难?一篇文章搞定他,不是我吹!

    1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时 ...

  8. 一篇文章搞定SpringMVC参数绑定

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  9. pymongo 一篇文章搞定

    一 安装 pip install pymongo 二 python连接mongodb数据库的前提 确保pymongo安装完毕 mongodb数据库的服务器端(mongod)必须处于启动状态 三 连接m ...

随机推荐

  1. luoguP4103 [HEOI2014]大工程

    题意 建出虚树DP. 设\(f[i]\)表示i的子树的第一问答案,\(minn[i]\)表示\(i\)的子树中到\(i\)最近的关键点,\(maxx[i]\)表示\(i\)的子树中到i距离最远的关键点 ...

  2. Dockerfil

    Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建ma ...

  3. ORB-SLAM2初步(Tracking.cpp)

    今天主要是分析一下Tracking.cpp这个文件,它是实现跟踪过程的主要文件,这里主要针对单目,并且只是截取了部分代码片段. 一.跟踪过程分析 首先构造函数中使用初始化列表对跟踪状态mState(N ...

  4. 经典排序 python实现

    稳定的排序算法:冒泡排序.插入排序.归并排序和基数排序. 不是稳定的排序算法:选择排序.快速排序.希尔排序.堆排序. 冒泡 def bobble(arr): length = len(arr) for ...

  5. Linux宝塔安装步骤

    首先:先运行 X shell 一:输入命令 Centos安装命令(一般都用这个): yum install -y wget && wget -O install.sh http://d ...

  6. WebBrowser中html元素如何触发winform事件 z

    只要注册一下事件就可以了. C#代码如下: using System;using System.ComponentModel;using System.Windows.Forms; namespace ...

  7. Java连载36-IDE使用

    一.主方法注意 每一个类都可以编写一个主方法,但是一般情况下,一个系统只有一个入口,所以主方法一般写一个 二.Myeclipse的使用 1.在workspace中工作区中有一个文件夹.metadata ...

  8. TP5 使用验证码功能

    工作中后台开发使用的是 TP5,但是对语法不是很熟悉,总是看着手册写代码.当时做 Java 的时候也是这样,很多语法需要靠百度.不是不能写代码,但是这样的效率感觉不高,没有行云流水的感觉,要是能有聊天 ...

  9. DNA Sorting POJ - 1007

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 114211   Accepted: 45704 De ...

  10. 专栏《Elasticsearch 7.x从入门到精通》的相关源代码

    新版Elasticsearch 7.3 和 Spring Boot 2.1.7 集成演示项目       第一个项目:演示Elasticsearch 6.4.3 和Spring Boot 2.1.7集 ...