关于Git的一点思考

2023-10-27

GIT历史

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

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

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

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

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

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

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

版本管理工具比较

SVN与GIT的区别:
在公司工作时,往往都是多个同事同时做一个项目,每个人做个人模块的功能,代码往同一个代码库中提交,这时候就需要一个版本控制工具。
现在大多数的公司都会选择用git了,或者从svn往git去做迁移。svn和git到底有什么区别呢?本质区别就是SVN是集中式的版本管理,GIT是分布式的版本管理。
集中式版本控制:
在这里插入图片描述
分布式版本控制:
在这里插入图片描述
SVN采用这种集中式版本控制,只有一个中央仓库,成需要开发时,需要从远程仓库进行代码拉取,如果远程仓库所在的服务器宕机,或者断电,就会影响开发进度,另外SVN和GIT比,有一个明显的短板就是版本控制。而GIT采取的分布式的版本控制方式,每一个开发人员可以管理一个自己的本地仓库,在不联网时也可以不影响开发进度,不同的开发者提交代码时,会将提交记录提交到同一个分支的其他开发人员,方便分支管理。

GIT工作原理

在这里插入图片描述
解释一下Working Directory是你的工作区,stage相当于是一个暂存区,你需要将Working Directory下的文件,add到stage下,这样就可以被git管理。
用git commit提交到History,就是你的本地仓库。你可以在完全不联网的情况下完成开发任务,如果需要一个团队同时开发,这个时候就需要一个远程仓库,每个人从远程仓库上pull最新分支代码,或者把修改的代码push到远程仓库。常用的远程仓库有github,gitee,bitbucket等

GIT的安装

git的安装比较简单,无脑下一步就行了,这里就不赘述。安装完后你会看到三个git相关的可执行文件:

在这里插入图片描述
Git Bash,与Git CMD的区别是Git Bash是Linux下支持的命令,Git CMD则是Windows下支持的命令,命令会有区别,比如linux下清屏的命令是clear,而Windows下则是cls。我们常用的是Git Bash。注意Git GUI是图形化界面,不推荐初学者使用,初学者还是多使用Git Bash,多练习使用指令,达到熟练的程度。
这里说一下安装完记得要配置一下用户名和邮箱,这个是后面连接远程仓库的时候需要用到。
命令:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

远程仓库配置

比较常用的代码托管平台就是github,但是由于服务器在国外,有时比较慢,甚至打不开。这里推荐gitee,也就是码云,国内做的比较好的代码托管平台。至于bitbucket我写在这里是因为现在的公司在用,过段时间我会更新一下bitbucket的使用感受和与github/gitee的区别。

配置:
需要在Git Bash 执行

$ ssh-keygen

会在C:\Users\xuzhenyu.ssh(这是我的目录)生成一个id_rsa.pub的公钥,复制公钥到gitee/github上的ssh配置的选项下即可。
在这里插入图片描述
github/bitbuket也是同理。

GIT的常用的一些命令

使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。

使用您当前目录作为Git仓库,我们只需使它初始化。

git init
使用我们指定目录作为Git仓库。

git init newrepo
从现在开始,我们将假设您在Git仓库根目录下,除非另有说明。

添加新文件
我们有一个仓库,但什么也没有,可以使用add命令添加文件。

git add filename
可以使用add… 继续添加任务文件。

提交版本
现在我们已经添加了这些文件,我们希望它们能够真正被保存在Git仓库。

为此,我们将它们提交到仓库。

git commit -m “Adding files”
如果您不使用-m,会出现编辑器来让你写自己的注释信息。

当我们修改了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a标识。

git commit -a -m “Changed some files”
git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。

千万注意,-a不会造成新文件被提交,只能修改。

发布版本
我们先从服务器克隆一个库并上传。

git clone ssh://example.com/~/www/project.git
现在我们修改之后可以进行推送到服务器。

git push ssh://example.com/~/www/project.git
取回更新
如果您已经按上面的进行push,下面命令表示,当前分支自动与唯一一个追踪分支进行合并。

git pull
从非默认位置更新到指定的url。

git pull http://git.example.com/project.git
已经超过了五分钟?
删除
如何你想从资源库中删除文件,我们使用rm。

git rm file
分支与合并
分支在本地完成,速度快。要创建一个新的分支,我们使用branch命令。

git branch test
branch命令不会将我们带入分支,只是创建一个新分支。所以我们使用checkout命令来更改分支。

git checkout test
第一个分支,或主分支,被称为"master"。

git checkout master
对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。

git checkout master
git merge test
如果您想删除分支,我们使用-d标识。

git branch -d test

GIT分支管理

后面补充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Git的一点思考 的相关文章

  • java使用libreOffice预览word,ppt,txt等文档

    首先电脑上需要下载libreOffice 中文官网下载地址 https zh cn libreoffice org download libreoffice 安装过程较为简单 安装完需要重启完成配置 不要安装在中文目录下 验证libreOf
  • linux服务器安装jdk,maven详细步骤

    linux服务器安装jdk maven以及nginx详细步骤 一 安装jdk 使用命令安装 二 安装maven 1 将下载好的maven包放入linux下自定义文件夹 2 配置maven环境 打开profile文件 命令如下 一 安装jdk
  • Spring采用properties配置多个数据库

    在一个项目中有这样的需求 上海和武汉采用不同的系统 每个系统都有自己的数据库 但是在上海的系统需要访问武汉的数据库 这就要在项目中配置两个数据源 下面是我给的SSH采用properties配置数据源的方法 1 要有两个properties文
  • 关于Git的一点思考

    GIT历史 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Lin
  • Java中常见的异常类型是哪两种?他们有什么区别?

    Java中有两种异常 受检查的异常 checked 和不受检查的异常 unchecked 不受检查的异常不需要在方法或者是构造函数上声明 就算是方法或者是构造函数可能会抛出这样的异常 并且不受检查的异常可以传播到方法或者构造函数的外面 相反
  • java内存结构

    一 Java内存分配 1 Java有几种存储区域 寄存器 在CPU内部 开发人员不能通过代码来控制寄存器的分配 由编译器来管理 栈 在Windows下 栈是向低地址扩展的数据结构 是一块连续的内存的区域 即栈顶的地址和栈的最大容量是系统预先
  • JSer做的模式悬浮窗体与Jquery做的分页

    今天在做web开发 上网搜索资料时 无意间发现了JSer 现简单介绍一下JSer JSer是一款类似于jQuery的开源脚本框架 使用JSer 将极大的简化您的javascript开发 使程序代码更加简洁和高效 使用JSer 您几乎无需再考
  • zookeeper源码(01)集群启动

    本文介绍一下zookeeper 3 5 7集群安装 解压安装 tar zxf apache zookeeper 3 5 7 bin tar gz 创建数据 日志目录 mv apache zookeeper 3 5 7 bin app zoo
  • java写的简单选票统计程序

    功能很简单的一个例子 和大家一起分享一下 同为java爱好者 一起学习进步哦 InputPerson java import java awt import java awt event import java util StringTok
  • 解决文本框刷新后之前输入的值还存在,没有清空的问题

    有过表单设计经验的朋友肯定知道 当我们在浏览器中输入表单信息的时候 往往input文本输入框会记录下之前提交表单的信息 以后每次只要双击 input文本输入框就会出现之前输入的文本 这样有时会觉得比较方便 但有时也会暴露用户的隐藏数据 所以
  • BUG库,列举我从今天开发遇到的BUG

    java lang IllegalArgumentException Invalid character found in the request target 在请求目标中发现的无效字符 方法请求体传入非法参数 一般是前台的锅 java
  • Autowired注入Service变成了biaomidou的Mapper代理

    问题概述 一个Springboot工程 使用Mybatis plus作为数据层框架 使用 MapperScan注解扫描Mapper接口 MapperScan org net5ijy cloud public class DemoApplic
  • Java中文与Base64互转(解决中文乱码的问题)

    最近线上出现一个问题 前后端交互时 某些情况下 会有中文乱码的问题 解决思路 1 在后端先将中文转为 Base64 后再传递到前端 此中文在前端不做显示处理 2 前端将参数再传递回后端时 后端解析 Base64 得到中文字符串 packag
  • 集合泛型为对象,根据对象的某个属性进行排序

    根据集合里的深度 排序集合 Collections sort irFldsltpvMList new Comparator 为集合名 为实体类对象 Override public int compare IrFldsltpvM o1 IrF
  • 关于Unsupported major.minor version 52.0报错问题解决方案

    目录 1 问题描述 2 问题分析 3 解决方案 步骤一 删除JDK1 7版本 步骤二 导入JDK1 8版本 步骤三 将新的JDK1 8引入到工程中 4 总结 1 问题描述 在启动项目工程中 当编译class文件的时候会报错一个 java l
  • 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

    马云说过 一个好的东西往往是是说不清楚的 姑且不论这句话的对与错 但我真的很佩服 淘宝技术这十年 这本书的作者子柳 能够通过淘宝的一些故事 按照时间顺序和IT发展的各种技术描述清楚 而且过程中读起来非常有意思 该读书笔记中参杂了很多原文的知
  • 使用Maven插件整合protocol buffer

    本来自己在网上找如何使protocol buffer在IDE 我用的是IDEA 上使用的 结果搜索出来的都不尽人意 因为都太粗略了 没有重点的去阐述 所以最后还是决定自己搜索相关的Maven插件 再慢慢地摸索 费了我好多的时间啊 本人小白
  • springCloud整合 Hystrix熔断器(配置)

    springCloud整合 Hystrix熔断器 文章目录 springCloud整合 Hystrix熔断器 前言 一 添加Hystrix依赖 二 properties文件开启熔断器 三 为调用另一个服务的接口添加实现类 前言 在分布式环境
  • 轻型数据库SQLite与Android实例

    SQLite 是一款轻型的数据库 是遵守ACID的关联式数据库管理系统 它的设计目标是嵌入式的 而且目前已经在很多嵌入式产品中使用了它 它占用资源非常的低 在嵌入式设备中 可能只需要几百K的内存就够了 它能够支持Windows Linux
  • 多态反射机制

    package duotai class Customer SuppressWarnings unused private String account SuppressWarnings unused private String pass

随机推荐

  • Prometheus监控各系统

    使用及安装 Prometheus 安装 Prometheus wget https github com prometheus prometheus releases download v2 30 3 prometheus 2 30 3 l
  • 10个数冒泡排序流程图_图文解析:如何用PLC梯形图实现冒泡排序算法?

    作者注 此程序仅供欣赏 作为科普知识了解即可 实际工程当中PLC一般都有专用的排序指令或函数 不需要我们亲自写排序算法 什么是冒泡排序 学习过一点C语言的朋友 对冒泡排序的概念应该并不陌生 冒泡排序是一种非常基础的排序算法 它的过程是将N个
  • G711 G729音频编码总结

    g729编码 每次只能编码160个字节 编码后为10个字节大小 16 1的压缩比 如果要编码320字节的数据 需要分两次进行 并且G729A不支持多路同时解码 否则声音会有问题 G729b也不行 ITU上的代码都不支持多路解码 但是g729
  • 【华为机试真题 C++】高矮个子排队-100

    编程题目 100分 高矮个子排队 2021 H1 H2 2022 Q1 考试题 时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 本题可使用本地IDE编
  • 毕业设计 stm32智能扫地机器人 - 单片机 嵌入式

    文章目录 0 简介 1 课题背景 2 硬件系统总体框架 2 1 电机驱动 2 2 红外线传感器 2 3 超声波传感器 2 4 MPU6050 2 5 ATK ESP8266 WI FI 模块 2 6 电源管理模块 3 软件系统设计 3 1
  • Jupyterlab 3以及Kite代码补全插件安装

    Jupyterlab 3 以及Kite代码补全插件安装 为啥安个这玩意儿 之前一直用Jupyter写一些机器学习和深度学习的东西 尤其是去年一年里白嫖谷歌的Colab很长时间 甚至还开了pro 他们的工作台就是Jupyter类型的 用多了就
  • 【Bias 03】Benchmarking Robustness in Object Detection: Autonomous Driving when Winter is Coming

    Related work Improving corruption robustness 去除腐蚀 1 提出一种基于DNN 恢复雨雾图片质量的方法 2 预处理中去除雨 但这种方法都是针对某种腐蚀 数据增强 把腐蚀数据加入训练 1 blurr
  • C++类模板和static数据成员

    静态数据成员对象之间共享的 当静态数据成员遇上类模板式也是如此吗 现有demo类模板 类中包含static数据成员 template
  • Linux modules-load 启动时加载驱动模块

    Linux modules load 启动时加载驱动模块 Linux 内核包含非常多驱动以及其他功能模块 驱动开发时 我们可以通过insmod命令向内核中载入模块 rmmod卸载模块 lsmod列出加载的所有模块 一般情况下 模块会根据硬件
  • 【MATLAB】常见语法结构和实用操作

    目录 语法结构 循环 遍历 结构 函数结构 画图操作 绘制函数图像 ezplot figure多图绘制 创建多项式 按照系数创建多项式 利用多项式零点创建多项式 解方程组 语法结构 循环 遍历 结构 与其它编程语言类似 Matlab也有循环
  • 对象存储oss的使用

    分为两个大块 1 阿里云oss配置 2 写代码 阿里云oss配置的最终木电的拿到这几个东西 1 accessKeyId 相当于身份认证 在注册完成之后 就可以拿到 2 accessKeySecret 相当于认证的密码 同样注册完成之后 就会
  • word图片撑满_word图片满页 word图片铺满整个页面

    word中如何让图片占满整个页面 确定 再确定 不OK了 7厘米 页面设置 里设置页面方向及纸张大小 当然也要根据你打印机性能 请将下面 锁定纵横比 那个钩取消 如将页面边距设置为0 点 版式 如图片太大你打印机不一定打印得了 再点右下角的
  • Python报错:IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in

    Python报错如下 E anaconda envs pytorch gpu python exe D project graphsage graphsage model py D project graphsage graphsage e
  • 自动找Bug/插件-代码静态检查findbugs-idea安装以及使用

    目录 简介 IDEA安装FindBugs Findbugs配置 配置排除一些类 扫描级别 IDEA中使用FindBugs 一些常见错误 补充 简介 Findbugs是一个静态分析工具 它检查类或者JAR 文件 将字节码与一组缺陷模式进行对比
  • 闲谈云计算

    其实一直到处看到关于云计算的东西和话题 云计算一直是一个很火的关键字 最近几天才有时间找来一本 云那些事 来看看 只是很粗略的看了关于云计算发展方向的一些问题 具体的云技术是一盘丰盛的大餐 得慢慢吃 其实我一直在没有认真去看云计算的时候 觉
  • Future和FutureTask用法详细介绍

    Future和FutureTask 文章目录 Future和FutureTask Future FutureTask Demo code output 在并发编程中 多线程的实现有继承Thread和Runnable 因为单继承的原因我们往往
  • Java阿里巴巴代码规范

    目录 1 编程规约 1 1 方法参数类型必须一致 不要出现自动装箱拆箱操作 1 1 1 反例 1 1 2 正例 1 2 SimpleDateFormat是线程不安全的 1 2 1 反例 1 2 2 正例 1 3 使用equals方法应该注意
  • 软件项目管理(第二版 宁涛)问答题(个人背诵)

    目录 第一章 概述 1 什么是软件项目管理 2 项目管理的 9 大知识领域是什么 3 项目管理的 5 个过程组是什么 5 项目经理的主要职责是什么 6 项目的特点是什么 7 项目和运营的共同点有哪些 8 项目集成管理是什么 9 规划过程组的
  • Flutter学习 — 从新页面返回数据给上一个页面

    效果图一 点击按钮 效果图二 点击YES后 返回上一级页面并传值 效果图三 收到值 并用底部弹出框显示结果 注释 代码 import package flutter material dart void main runApp new Ma
  • 关于Git的一点思考

    GIT历史 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Lin