git基础

Git

版本控制

什么是版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。

为什么要版本控制

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

本地版本控制系统

集中化的版本控制系统

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。

集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

集中化的版本控制系统

这么做虽然解决了本地版本控制系统无法让在不同系统上的开发者协同工作的诟病,但也还是存在下面的问题:

  • 单点故障: 中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏又没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
  • 必须联网才能工作: 受网络状况、带宽影响。

分布式版本控制系统

于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 Git 就是一个典型的分布式版本控制系统。

这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

分布式版本控制系统

分布式版本控制系统可以不用联网就可以工作,因为每个人的电脑上都是完整的版本库,当你修改了某个文件后,你只需要将自己的修改推送给别人就可以了。但是,在实际使用分布式版本控制系统的时候,很少会直接进行推送修改,而是使用一台充当“中央服务器”的东西。这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

分布式版本控制系统的优势不单是不必联网这么简单,后面我们还会看到 Git 极其强大的分支管理等功能。

认识 Git

Git 简史

Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。但是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统,而且对新的版本控制系统做了很多改进。

Git 与其他版本管理系统的主要区别

Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑。

下面我们主要说一个关于 Git 与其他版本管理系统的主要差别:对待数据的方式

Git 采用的是直接记录快照的方式,而非差异比较。我后面会详细介绍这两种方式的差别。

大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

具体原理如下图所示,理解起来其实很简单,每当我们提交更新一个文件之后,系统都会记录这个文件做了哪些更新,以增量符号 Δ(Delta)表示。

img

我们怎样才能得到一个文件的最终版本呢?

很简单,高中数学的基本知识,我们只需要将这些原文件和这些增加进行相加就行了。

这种方式有什么问题呢?

比如我们的增量特别特别多的话,如果我们要得到最终的文件是不是会耗费时间和性能。

Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流

img

Git 的三种状态

Git 有三种状态,你的文件可能处于其中之一:

  1. 已提交(committed):数据已经安全的保存在本地数据库中。
  2. 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
  3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入 Git 项目的三个工作区域的概念:Git 仓库(.git directory)工作目录(Working Directory) 以及 暂存区域(Staging Area)

img

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git 使用快速入门

获取 Git 仓库

有两种取得 Git 项目仓库的方法。

  1. 在现有目录中初始化仓库: 进入项目目录运行 git init 命令,该命令将创建一个名为 .git 的子目录。
  2. 从一个服务器克隆一个现有的 Git 仓库: git clone [url] 自定义本地仓库的名字: git clone [url] directoryname

记录每次更新到仓库

  1. 检测当前文件状态 : git status
  2. 提出更改(把它们添加到暂存区):git add filename (针对特定文件)、git add *(所有文件)、git add *.txt(支持通配符,所有 .txt 文件)
  3. 忽略文件.gitignore 文件
  4. 提交更新: git commit -m "代码提交信息" (每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit
  5. 跳过使用暂存区域更新的方式 : git commit -a -m "代码提交信息"git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。
  6. 移除文件git rm filename (从暂存区域移除,然后提交。)
  7. 对文件重命名git mv README.md README(这个命令相当于mv README.md READMEgit rm README.mdgit add README 这三条命令的集合)

一个好的 Git 提交消息

一个好的 Git 提交消息如下:

标题行:用这一行来描述和解释你的这次提交主体部分可以是很少的几行,来加入更多的细节来解释提交,最好是能给出一些相关的背景或者解释这个提交能修复和解决什么问题。主体部分当然也可以有几段,但是一定要注意换行和句子不要太长。因为这样在使用 "git log" 的时候会有缩进比较好看。

提交的标题行描述应该尽量的清晰和尽量的一句话概括。这样就方便相关的 Git 日志查看工具显示和其他人的阅读。

推送改动到远程仓库

  • 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:git remote add origin <server> ,比如我们要让本地的一个仓库和 GitHub 上创建的一个仓库关联可以这样git remote add origin https://github.com/Snailclimb/test.git

  • 将这些改动提交到远端仓库:git push origin master (可以把 master 换成你想要推送的任何分支)

    如此你就能够将你的改动推送到所添加的服务器上去了。

远程仓库的移除与重命名

  • 将 test 重命名为 test1:git remote rename test test1
  • 移除远程仓库 test1:git remote rm test1

查看提交历史

在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。git log 会按提交时间列出所有的更新,最近的更新排在最上面。

可以添加一些参数来查看自己希望看到的内容:

只看某个人的提交记录:

git log --author=bob

撤销操作

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:

git commit --amend

取消暂存的文件

git reset filename

撤消对文件的修改:

git checkout -- filename

假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:

git fetch origin
git reset --hard origin/master

分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认”的分支。在其他分支上进行开发,完成后再将它们合并到主分支上。

我们通常在开发新功能、修复一个紧急 bug 等等时候会选择创建分支。单分支开发好还是多分支开发好,还是要看具体场景来说。

创建一个名字叫做 test 的分支

git branch test

切换当前分支到 test(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)

git checkout test

你也可以直接这样创建分支并切换过去(上面两条命令的合写)

git checkout -b feature_x

切换到主分支

git checkout master

合并分支(可能会有冲突)

 git merge test

把新建的分支删掉

git branch -d feature_x

将分支推送到远端仓库(推送成功后其他人可见):

git push origin

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编实现点灯实验

.text .global _start _start: 设置GPIOF寄存器的时钟使能LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0x1<<5)STR R1,[R0]设置GPIOE寄存器的时钟使能LDR R0,0X50000A28LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1ORR R1,R1,#(0x1<<4) 第4位设置为1STR R1,[…

[ROS2系列] ubuntu 20.04测试rtabmap

目录 背景&#xff1a; 一、配置 turtlebot3 二、安装RTAB-Map ROS2包&#xff1a; 三、启动 Turtlebot3 模拟器&#xff1a; 四、启动 RTAB 地图&#xff1a; 五、启动导航&#xff08;nav2_bringup应安装软件包&#xff09;&#xff1a; 背景&#xff1a; 1、设备&…

什么是国密证书?

国密证书是指中国自主研发的密码算法和加密技术所生成的数字证书。它是为了保护国家信息安全而开发的一种电子证书标准。 国密证书采用了国际上通用的X.509v3标准&#xff0c;但具有自己独特的密码算法和密钥长度。这些算法和密钥长度在国际上被广泛接受并认可&#xff0c;同时…

ansible 调研

参考&#xff1a;自动化运维工具——ansible详解&#xff08;一&#xff09; - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xf…

Jetson Orin NX 开发指南(3): 安装 ROS 系统

一、前言 由于本专栏主要介绍如何将 Jetson Orin NX 作为自主无人机的机载电脑&#xff0c;因此需要 ROS 操作系统来实现各个模块的衔接&#xff0c;ROS支持在Linux系统上安装部署&#xff0c;因为ROS与Ubuntu兼容性最好&#xff0c;使用它的首选开发平台是Ubuntu&#xff0c;…

GitHub基础

GitHUb快速入门教程&#xff1a;GitHub - skills/introduction-to-github: Get started using GitHub in less than an hour. 其实&#xff0c;这是一系列Github官方提供的互动式教程&#xff1a;GitHub Skills 官方文档&#xff1a;Hello World - GitHub 文档 1、仓库是什么意…

windows cmd下查看环境变量的信息

在windows cmd窗口下&#xff0c;怎么查看环境变量的值&#xff1f; 直接输入set命令然后回车&#xff0c;即可看到所有环境变量的信息&#xff0c;例如&#xff1a; 输入set <变量名>然后回车&#xff0c;可以查看某个环境变量的值&#xff0c;例如set path&#xff1a…

如何限制word文件中部分内容无法编辑

工作中我们经常会用到Word制作一些文件&#xff0c;文件中有一部分内容不想他人编辑&#xff0c;我们可以设置限制编辑&#xff0c;可以对一部分内容设置限制编辑&#xff0c;具体方法如下&#xff1a; 我们将需要将可以编辑的地方选中&#xff0c;然后打开限制编辑功能 然后勾…

Maven 项目模板

目录 什么是 archetype&#xff1f; 使用项目模板 Maven 将询问原型的版本 创建的项目 创建 pom.xml App.java AppTest.java 阿里云工具 Maven 使用 archetype(原型) 来创建自定义的项目结构&#xff0c;形成 Maven 项目模板。 在前面章节我们学到 Maven 使用下面的命…

IDEA工具之debug第三方jar包源码顺序错乱

IDEA工具之debug第三方jar包源码顺序错乱 场景描述原因分析解决方案 场景描述 概述 使用IDEA排查问题时&#xff0c;经常需要debug源码&#xff0c;当F7跟进依赖jar包时&#xff0c;总是出现Decompiled.class file, bytecode version:51.0 (Java 7)&#xff0c;提示Source code…

访问Apache Tomcat的manager页面

配置访问Tomcat manager页面的用户名、密码、角色 Tomcat安装完成后&#xff0c;包含了一个管理应用&#xff0c;默认安装在 <Tomcat安装目录>/webapps/manager 例如&#xff1a; 要使用管理页面的功能&#xff0c;需要在conf/tomcat-users.xml文件中配置用户、密码及…

c#-特殊的集合

位数组 可观察的集合 private ObservableCollection<string> strList new ObservableCollection<string>();// Start is called before the first frame updatevoid Start(){strList.CollectionChanged Change;strList.Add("ssss");strList.Add("…

[鹏城杯 2022]简单的php - 无数字字母RCE(取反)【*】

[鹏城杯 2022]简单的php 一、解题流程二、思考总结 题目代码&#xff1a; <?php show_source(__FILE__);$code $_GET[code];if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello);}e…

Spark分布式计算原理

一、Spark WordCount运行原理 二、划分Stage 数据本地化 移动计算&#xff0c;而不是移动数据 保证一个Stage内不会发生数据移动 三、Spark Shuffle过程 在分区之间重新分配数据 父RDD中同一分区中的数据按照算子要求重新进入RDD的不同分区中 中间结果写入磁盘 有子RDD拉取数…

零代码编程:用ChatGPT批量调整文件名称中的词汇顺序

文件夹里面很多文件&#xff0c;需要批量挑战标题中的一些词组顺序&#xff1a;“Peppa Pig - Kylie Kangaroo (14 episode _ 4 season) [HD].mp4”这个文件名改成“14 episode _ 4 season _ Peppa Pig - Kylie Kangaroo.mp4”&#xff0c;可以在ChatGPT中输入提示词&#xff1…

NSSCTF[SWPUCTF 2021 新生赛]hardrce(无字母RCE)

代码审计&#xff1a; 使用get方式请求给wllm传参 使用preg_match函数正则匹配过滤掉了一些符号 \t,\r,\n,\,\[,\^,\],\",\-,\$,\*,\?,\<,\>,\,\ 以及 [a-zA-Z] 即所有的大小写字母 如果传入内容满足这些条件则会执行eval函数 URL编码取反绕过正则实现RCE&…

第83步 时间序列建模实战:Catboost回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍Catboost回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

修改ubuntu服务器fs文件最大打开数

起因 在对项目进行压测的时候&#xff0c;请求异常 java.net.SocketException: socket closed&#xff0c;查看nginx代理服务器的日志。tail -f -n500 /var/log/nginx/error.log 显示 文件打开数太多socket() failed (24: Too many open files) while connecting to upstream …

数据结构:链表(1)

顺序表的优缺点 缺点&#xff1a; 1.插入数据必须移动其他数据&#xff0c;最坏情况下&#xff0c;就是插入到0位置。时间复杂度O(N) 2.删除数据必须移动其他数据&#xff0c;最坏情况下&#xff0c;就是删除0位置。时间复杂度O(N) 3.扩容之后&#xff0c;有可能会浪费空间…

游戏服务端性能测试实战总结

导语&#xff1a;近期经历了一系列的性能测试&#xff0c;涵盖了Web服务器和游戏服务器的领域。在这篇文章中&#xff0c;我将会对游戏服务端所做的测试进行详细整理和记录。需要注意的是&#xff0c;本文着重于记录&#xff0c;而并非深入的编程讨论。在这里&#xff0c;我将与…