Git教程第0篇-什么是Git、Git有什么作用

2019-10-10 06:52:09   Git

什么是Git

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

为什么要用Git

首先让我们看看两个小背景

  • 如果老板让你写一份文档,然后写完后老板不满意,让你改,然后一通乱改,老板还是不满意,你又一通乱改,突然老板说,还是要你第一次那版吧。是不是很崩溃,比起一遍一遍的改,更崩溃的是找不到之前的版本了,难不成要凭借记忆重写或者改回到第一版。有经验的老油条肯定会保存多个文件,每做一些修改就保存一次,并且记录一些例如时间的信息,这样就知道每次改了什么,也很容易找到某个日期的某个版本了。
  • 如果你是跟别人合作,然后别的同事需要你的文件,最容易想到的就是u盘copy一下嘛,或者微信QQ等工具传输一下文件,我们很讨厌的一个事情是工作做到一半被别人打断思路,所以拷贝文件这件事情都是需要两个人都要参与处理的。而且如果是两个人合伙编辑一份文档,那如何合并,处理冲突呢?显然人工检查修改合并是很麻烦的。

Git的作用

看了上面的小背景,我想大家就很明白了,没错,Git就是干了一件处理版本的事情,并且支持多人协作处理同一个项目。我们理想中,也是Git会做的事情就像这样:

file

这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的时代。

Git相比其他版本控制工具有优势

去中心化

这个应该就是所说的分布式。Git是没有中心服务器的,每个人机器上都是一个完整的库,我们平时开发代码时的中央服务器其实和我们自己机器上的库内容是完全一样的(格式有点不同,是bare的)。虽然平时大家都是将代码提交到中央服务器上再统一pull别人的代码,但实际情况你可以总是pull张三的库,然后push给李四等等操作。个人认为去中心化是Git(也包括其他分布式VCS)最伟大的改变。去中心化意味着没有权威、没有主力,所有人都是平等的。这概念本身看起来好像没什么,但实际对社区影响是巨大的,去看看 http://github.com 上的fork功能,你可以fork任何一个你喜欢的项目,接着按自己的喜好修改成自己的项目,或是发起pull request请原作者merge你的功能到他们项目里去(这同样也得益于Git另一项与SVN很大不同的功能——分支策略),而且大多数开源项目都会鼓励你去fork它们。这里面没有权威,没有主从,所有人只要有兴趣都可以在其他人的基础上去构建更强大或是更有领域针对性的项目。大家不是为了开发某个项目而来,而是为了贡献更强的功能给社区,这样最终的项目将是整个社区所有人共同努力的结果,将生生世世繁衍不息。当然,去中心化也可能会引发一些问题,比如Linux的各种发行版本有时候让人难以抉择,但相信市场之手会帮我们做出选择。

本地提交

本地提交好处主要有几点: 1) 断网提交 2) 小步提交。可以对自己的阶段成果有跟踪,并且提高每次变更的安全性 3) 本地库。这个和断网提交是同一个实现,但从需求角度出发则略有不同,主要是说即使只有自己一个人开发项目,也可以轻易的让自己的代码有版本跟踪,而不需要去费力建个什么svn server 4) 本地回滚。这个其实是由于本地库的存在而产生的,但可以减少中央库上的冗余版本

分支策略

分支策略从技术上来讲是将版本节点化了,即最终的版本状态是树状的。从结果上来讲既是弱化了分支,也是强化了分支。弱化的是分支的概念,强化的是分支的功能。在Git实际开发中分支的分离和merge是属于日常操作,开启和合并分支成本相比SVN要小得多:SVN是复制一份代码到分支目录,Git则是在分支点做一下标记。随便一次冲突就会自动产生分支,所以大家每天都在与分支打交道。这便是弱化了分支的概念,由于分支成本很小,因此使得按功能分支的开发模式(每个分支一个功能,开发完了再merge到主干)变得非常简单,大家可以完全不需要再因为担心SCM成本太高而选用主干开发模式(所有功能都在主干上开发,到了发版本前再分离出分支)。当然Git还有很多其他不错的地方,比如Tag策略(和分支策略一样,做个标记,不像SVN要复制一份过去),下载时会压缩以加快速度,各类提示非常到位

viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/211
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

标签

AdSense Anaconda Android apache API apt Auth AWS B-tree Bandwagon Blog bower brew bytes Caffe Catalina certbot Charles cloudcone Composer conda CoreML CPU crontab CSS csv Cuda cv2 datetime Digitalocean DNS Docker Docker-Compose Eloquent Excel export Flask FTP GET Git GitHub GitLab Gmail GoDaddy Google GTM hash Homebrew Homestead HTML http HTTPS IDEA image imagemagick imagick imgick import InnoDB ios iou iPhone ISO8601 iTerm2 Java JavaScript JPG JS Keras Laravel Laravel-Admin lazyload Linux list Livewire lnmp load logs Lravel Mac Markdown matplotlib md5 mix MobileNet Mojave mongo MongoDB MySQL Namesilo Nginx Node npm numpy Nvidia Nvidia-Docker onevps OpenCV Openpose openpyxl oss Outline parse PayPal PHP php-fpm PhpStorm PHP扩展 PIL Pillow pip PNG POST Protobuf PyCharm pyenv pymongo Python Python,人工智能,机器学习,VOC,xml Queue Redis requests RGB Sanctum save selenium SEO Shadowsock Shadowsocks ShadowsocksR simplemde Spring Boot SQLServer ssd SSH ssl SSL证书 SSR str Sublime sudo swap Swift Tensorflow TensorflowLite Terminal Terminator timestamp Ubuntu urllib UTC v2ray Valet Validation Validator VienBlog virtualenvs VPN VPS Vultr Web Windows WordPress Xcode xlsx yaml YAPI YUV zip zmq zsh 上网 下载图片 主从同步 云主机 云存储 云开发 云服务器 人工智能 优化 优惠码 伪原创 作弊与反作弊 免费ss账号 免费提现 切片 前端 加密 协议 博客 友链 双击事件 后台运行 后端 命令 国内镜像源 图标 图片操作 图片转换 域名 多身份认证 大小写转换 姿态检测 安卓模拟器 安装 定时任务 定时执行 密码 密钥 导出导入 小程序码 延迟加载 异常 微信 微信小程序 快捷方式 慢查询 懒加载 提现 搜索引擎 搬瓦工 搭梯子 教程 数据库 数据重复 文件上传 无法登录 日志 日期 时区 时间 时间戳 服务器 机器学习 权限 梯子 模拟浏览器 港版支付宝 漏洞 爬虫 生活服务 用户管理 病毒 登录 目标检测 科学上网 系统升级 索引 组件 组件开发 编辑器 自动付款 自定义组件 英文伪原创 计划任务 计算机视觉 订阅通知 认证 语法 读写分离 远程连接 配置文件 重定向 错误异常 错误提示 队列 阿里云 香港 香港手机号
亲情非友情链接