关于git你应该知道的一些东西

news2024/10/2 6:43:04

 

前言

        好好写代码,好好的反思踩过的坑,然后尽量不要给别人挖坑。这是我对自己,以及每个刚入行或即将的小伙伴的建议。一个软件工程项目,是一个系统性极强且较为复杂的工作,会有很多人参与到这个工作中来,如何高效管理这么多人的提交的代码,就显得特别重要了。这就用到了版本控制管理系统。无论代码或其他文件是来自一个人,还是一个团队,忠实记录每一次的变更,还能在必要时候帮助还原任何一次历史变更,以及可以支持团队协作。而git就是版本控制管理系统中最好用的工具之一,对于每个前端或后端的程序员来说,使用git正确的提交代码、拉取代码、处理冲突、回滚代码、切换分支就成了必会的技能。

        git是一个版本控制工具,既然是工具,如何使用正确工具,提高工作效率,才是作用普通使用者更关心的内容。因此这个专栏里是实战性比较强的内容,不会长篇地分析git的原理,以及这样的设计是如何的优秀,只会重点介绍git正确使用方法以及为什么要这样用,而本篇的重点先大概认识一下git。

git是什么

        刚才已经提到了,git是一个版本控制工具,当然版本控制工具有很多,如SVN,但是Git是最流行,并且最好用的之一。关于git的诞生,还有一些小故事,感兴趣的小伙伴可以自行百度检索。我们需要知道的是,git是用C语言编写,是开源的分布式版本控制管理工具。大名鼎鼎的github就是用git来管理他们的网站上的代码的。这里需要特别强调一下,git和github是两个东西,git是版本控制系统或工具,github是一个社区网站,在这个社区网站上可以上传、下载自己或团队代码,但是因为其服务区在国外,所以网速会比较慢。那么国内有没有类似的网站?当然也有,比较有影响力就是gitee了。这里要特别警告一下新入行的小伙:不要把公司的代码或文档上传到github或gitee上!这是极其危险的行为。

集中式版本控制与分布式版本控制

        主流的版本控制工具可以分为两类:集中式版本控制和分布式版本控制,两类的代表工具分别是svn和git。下面就两种方式作一些简单介绍。

集中式版本控制

        集中式版本控制就是把代码放在一个服务器上集中管理,每次你需要写代码的时候需要从服务器上拉取一份,写完代码后再提交到服务器,你的本地实际上相当于一个客户端。

        这种模式我认为有两个缺点:

第一、如果服务端与客户端不在一个局域网内,客户端的代码没有办法提交到服务端仓库;

第二、新建分支的时候,是把原分支的文件另外复制一份作为新分支,版本不断迭代,分支越来越多,就会造成版本库的体积越来越大。

分布式版本控制

        分布式版本控制系统理论上来说没有所谓的“服务端”,每个人的电脑本身即是服务端,也是客户端,并且都有一个完整的版本库,任意两台电脑都可以相互交换文件。不过这样在实际使用过程中不太方便,所以通常会有一台单独的主机充当服务端,用来方便每个人交换修改的内容。平时每个人的本地作为客户端可以正常的向服务端提交或拉取代码,当服务端故障不可用的时候,可以把任务一个客户端提升为为服务端,其他的客户端的远程仓库地址更新为新的服务端即可。

        我认为分布式版本控制解决了集中式版本控制的缺点:

第一、如果因为网络原因服务端与客户端连接不通或者暂时不想提交代码而又担心代码可能会丢失的时候,可以先把代码提交到本地仓库,待网络恢复或想提交的时候,再推送至远程仓库;

第二、每次的代码提交操作,都会生成一个版本号并记录与上一次提交相比的变更内容,切换分支也是一样,版本库实际只有一份代码,每一次的操作,对应的是一个版本号,一份变更内容记录,版本库会保存这些历史记录。

git基本原理

        通常情况下,对于新手来说,会使用git提交代码、拉取代码基本上就可以了,创建分支、合并代码、处理冲突这些高阶的技能有更专业的人来做,菜鸟们没什么好担心的。但是谁又愿意承认自己永远是只菜鸟呢?本着能靠自己,为什么要靠别人的原则,显然满足不了那些自我要求成长者的胃口。所以熟练掌握了常用提交代码、拉取代码这些技能之后,就需要掌握一下关于git的几个比较核心的概念。因为这几个概念很简单,也很重要,后面的代码合并、冲突处理、回滚、回退都与这几个概念有关。

工作区

        平时写代码的地方,所有代码的添加、删除、修改操作都发生在工作区中。

暂存区

        在工作区完成文件的添加、删除、修改操作后,通过add命令添加临时存储区域,等待被提交,这个区域就是摆在区。

仓库区

        仓库区是存储正式代码的地方,根据物理位置不同,分为本地仓库和远程仓库中。

本地仓库

        所谓本地仓库,就是工作区的代码通过commit命令后,文件就被存储在仓库区的本地仓库了。

远程仓库

        远程仓库是相对于本地仓库而言,可以理解为本地仓库的服务端,被commit到本地仓库的文件通过push命令推送到远程仓库。

状态管理

        在文件操作的过程中,文件的状态也会在不同的阶段呈现出不同的状态,总体上分为两种状态:受控状态和未受控状态,受控状态可以再细分为已修改、已暂存、已提交。

已修改

        修改了受控状态的文件,但是修改的结果还未添加到暂存区。

已暂存

        修改后的文件,被添加到了暂存区,等待被提交。

已提交

        文件已经被提交到了本地仓库。

总结

        所谓的工作区、暂存区、本地仓库的本质是根据文件的不同状态而进行的一个逻辑区分,实际指的是本地磁盘的同一个物理工作目录。最开始新增一个文件,文件本身未受到版本控制管理时,处于未受控状态,所在的地方称之为工作区,执行add命令后,文件纳入版本控制管理,处于已暂存状态,被存储在暂存区,再次执行commit命令后,文件处于已提交状态,文件被存储到仓库区的本地仓库,最后执行push命令本地仓库的内容会被推送到远程仓库。如果远程仓库有其他人提交的内容,可以通过pull命令拉取到本地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Yarn pengding任务的原因之一:Reserved

一、背景 系统:linux centos7.4 Yarn:3.0.0-cdh6.3.2 二、现象 业务方通知,大部分使用yarn的任务都长时间处于执行中的状态。 三、问题排查 查看yarn的ui发现,memory reserved的值,已经和memory total等值了。 然…

Unity内实现无卡顿取图像推流/截屏等功能

文章目录 一、Unity提供的ScreenCapture取图像接口二、我们一个一个看API:三、Unity日本大神keijiro还提供了一种异步截图的方案,完整代码如下:一、Unity提供的ScreenCapture取图像接口 众所周知,Unity提供了ScreenCapture API用来获取引擎最终渲染到屏幕的图像: 二、我…

深度学习入门(三十五)计算性能 编译器和解释器

深度学习入门(三十五)计算性能 编译器和解释器前言计算性能——编译器和解释器教材1 符号式编程2 混合式编程3 Sequential的混合式编程3.1 通过混合式编程加速3.2 序列化4 小结前言 核心内容来自博客链接1博客连接2希望大家多多支持作者 本文记录用&…

【离散数学】第一章 测试

1. A. 对 B. 错 正确答案:A 2. A. 对 B. 错 正确答案:B 3. A. 错 B. 对 正确答案:B 4.p↔q⇔p↔q A. 对 B. 错 正确答案:A 5. A. 对 B. 错 正确答案:A 6.n个命题变元组成的命题公式共有( )种不同的…

小胶质细胞仅仅是神经系统内的“配角”?

大脑中存在着数量众多的神经胶质细胞,约占人类大脑细胞的 90%;不同类型的胶质细胞在起源、组成、形态和解剖学上都是不同的,而且它们发挥着不同的功能。 图 1. 中枢神经系统的四种神经细胞 小胶质细胞与 AD 疾病进程 小胶质细胞是一类来源于…

数据分析的重要性体现在哪?

近几年,数据分析成为了当今IT界的新起之秀,在我国互联网飞速发展的浪潮下,无论是公司职员还是个体商户或大公司管理者,都需要学习掌握数据分析的能力,它已经成为数据时代各行各业突破各自行业发展瓶颈的最有效手段。 那…

微信小程序复习题

文章目录填空题选择题判断题分析题(20)分析代码显示效果页面设计题(40)填空题 微信小程序创始人是 张小龙 ,英文缩写 Mini Program小程序是一种无需下载和无需安装即可使用的应用,它实现了应用“ 触手可得…

[附源码]java毕业设计基于web的硕士研究生入学考务管理

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

5、Redis的发布和订阅

文章目录5、Redis的发布和订阅5.1、什么是发布和订阅5.2、Redis的发布和订阅5.2.1、客户端可以订阅频道如下图5.2.2、当给这个频道发布消息后,消息就会发送给订阅的客户端5.3、发布订阅命令行实现5.3.1、打开一个客户端订阅channel15.3.2、打开另一个客户端&#xf…

Day32——二叉树专题

文章目录28.删除二叉搜索树的节点29.修剪二叉搜索树30.将有序数组转换为二叉搜索树31. 把二叉搜索树转换为累加树28.删除二叉搜索树的节点 题目链接:450. 删除二叉搜索树中的节点 - 力扣(LeetCode) 如果目标节点大于当前节点值,则…

MapReduce编程模型——自定义序列化类实现多指标统计

🏠Hadoop序列化 👉序列化 序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。 &#…

7天酒店亮相中国国际饭店业大会元宇宙线上展 创见酒店投资新未来

11月12日,由中国饭店协会主办的第一届酒旅菁英品牌嘉年华“元宇宙”线上展成功举行。7天酒店“元宇宙”展馆首度亮相,通过数字化交互、虚拟展厅、线上路演等,为行业和市场带来耳目一新的创新营销形式。 作为第七届中国国际饭店业大会的线上分…

基于微信小程序的药店管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mav…

蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)

前言 本篇为蓝牙HID系列篇章之一,本篇以红米K30(MIUI13即Android 12)手机作为蓝牙HID设备,可以与电脑、手机、平板等其他蓝牙主机进行配对从而实现鼠标触控板的功能。 蓝牙HID系列篇章: 蓝牙HID——将android设备变成…

babel-plugin-import 实现按需引入

官方文档:https://github.com/umijs/babel-plugin-import#usage 为什么需要这个插件? 在 antd 和 element 两个组件库中,index.js 分别是这样的: // antd export { default as Button } from ./button; export { default as Tab…

智能云门禁解决方案来了

传统门禁存在的问题 01、安全性差:传统门禁卡易被复制和盗用无法精准识别进出人员身份造成较大安全隐患。 02、通行不便:要求人员近距离操作,当使 用者双手被占用时通行不便 门禁卡丢失或密码遗忘造成 无法开门。 03、管理困难&#xff1a…

Multilevel Cooperative Coevolution for Large Scale Optimization

0、论文背景 本文在CCEA_G的基础上,提出了MLCC框架。在MLCC中,基于不同组大小的随机分组策略构造了一组问题分解器。演化过程分为若干个循环,在每个周期开始时,MLCC使用自适应机制根据其历史性能选择分解器。由于不同的组大小捕获…

数据结构-图的存储结构

目录 图的存储结构邻接矩阵邻接表图的邻接矩阵和邻接表两种存储结构各有什么优缺点?图的存储结构 邻接矩阵 邻接矩阵的主要特点:

spring7:总结56

1.handler的形参解析(即如何把请求参数转化为形参) 注解参数解析原理 model and map解析原理 自定义对象处理原理 2.数据响应原理(即如何把返回值传给前端) 整体返回原理 详解其中的内容协商流程(基于请求头&#x…

数据库分区的通俗解释

关于数据库分区,分表,分库,我通俗易懂的来举几个栗子,看过还不懂,你打我。。。 村里一家四口人(老爹叫A)有两儿子(分别是A1,A2),长大了要自己种地了,就嚷嚷着要分家,把村…