一篇文章搞定git
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)
前面提到过
master
是Git
为我们自动创建的第一个分支,也叫主分支,其它分支开发完成后都要合并到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的更多相关文章
- 一篇文章搞定Git——Git代码管理及使用规范
一篇文章搞定Git--Git代码管理及使用规范 https://blog.csdn.net/weixin_42092278/article/details/90448721
- 一篇文章搞定百度OCR图片文字识别API
一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104
- 一篇文章搞定JS类型转换
啥要说这个东西?一道面试题就给我去说它的动机.题如下: var bool = new Boolean(false); if (bool) { alert('true'); } else { alert ...
- 一篇文章搞定 Nginx 反向代理与负载均衡
代理 要想弄明白反向代理,首先要知道啥是正向代理,要搞懂正向代理只需要知道啥是代理即可.代理其实就是一个中介,在不同事物或同一事物内部起到居间联系作用的环节.比如买票黄牛,房屋中介等等. 在互联网中代 ...
- 一篇文章搞定Selenium元素定位/封装/数据驱动
小伙伴都知道,自动化最重的,又最"难"(因为实战中会碰到定位的各种坑)那就是定位元素.如果不熟练掌握定位,那只怕你比功能测式的小伙伴下班还会要晚!扎心了吧! Selenium常用定 ...
- 一篇文章搞定css3 3d效果
css3 3d学习心得 卡片反转 魔方 banner图 首先我们要学习好css3 3d一定要有一定的立体感 通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了. 首先先给大家看一个小例子: 卡 ...
- Python正则表达式很难?一篇文章搞定他,不是我吹!
1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时 ...
- 一篇文章搞定SpringMVC参数绑定
SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...
- pymongo 一篇文章搞定
一 安装 pip install pymongo 二 python连接mongodb数据库的前提 确保pymongo安装完毕 mongodb数据库的服务器端(mongod)必须处于启动状态 三 连接m ...
随机推荐
- k-means实战-RFM客户价值分群
数据挖掘的十大算法 基本概念 导入数据集到mysql数据库中 总共有940个独立消费数据 K-Means 算法 K-Means 算法是一个聚类算法.你可以这么理解,最终我想把物体划分成 K 类.假设每 ...
- 小白专场-堆中的路径-c语言实现
目录 一.题意理解 二.堆的表示及其操作 三.主程序 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/ ...
- pip 设置阿里云源
在~/.pip/pip.conf文件中添加或修改 mkdir ~/.pip [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [i ...
- Leetcode练习题Remove Element
Leetcode练习题Remove Element Question: Given an array nums and a value val, remove all instances of tha ...
- Spring @CrossOrigin 通配符 解决跨域问题
@CrossOrigin 通配符 解决跨域问题 痛点: 对很多api接口需要 开放H5 Ajax跨域请求支持 由于环境多套域名不同,而CrossOrigin 原生只支持* 或者具体域名的跨域支持 所以 ...
- Kubernetes 之 Nameserver limits were exceeded
1.问题描述 最近查看kubernetes 的events,发现了有两个节点经常出现下面的信息: DNSConfigForming Nameserver limits were exceeded, s ...
- Kubernetes 部署Web UI (Dashboard)
Kubernetes 部署Web UI (Dashboard) 项目下载地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/ ...
- PHP--常用配置项
一.简介 PHP的配置项可以在配置文件php.ini中配置,也可以在脚本中使用ini_set()函数临时配置. 二.常用配置项 1.错误信息相关配置 1)display_errors 设定PHP是否将 ...
- Visual Studio2017使用EF添加Mysql
为了能够在Visual Studio 中集成Mysql, 首先需要安装MySql的连接工具 与 MySql的VisualStudio插件. MySQL Connector Net 6.8.8 (目前最 ...
- placeholder和assign速度对比
在CPU上,使用variable和placeholder效果差不多 在GPU上,使用variable要比每次都传placeholder快得多3:2 使用GPU的瓶颈主要在于GPU和内存之间的复制操作 ...