Git的原理及使用

2023-11-12

一、简述

在Git出现之前,大部分公司还是用SVN进行项目管理的,这里来对比一下;

集中式(SVN):

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

优点:1、管理方便,符合一般逻辑;2、安全性高;3、代码一致性高;4、适合人数不多的开发;

缺点:1、服务器压力大,数据库容量暴增;如果连接不上服务器,基本不能工作;3、不适合开源开发;

分布式(Git):

在分布式版本控制系统中,客户端不只提取最新版本的文件快照,而是把原始的代码仓库完整的镜像下来,因此任何一处的服务器发生崩溃,都可以用任意本地仓库进行恢复;这个系统可以指定和不同的远端代码仓库进行交互;

优点:1、适合分布式开发,强调个体;2、公共服务器压力和数据量都不会太大;3、速度快,灵活性高;4、任意两个开发人员更容易冲突;5、离线工作;

缺点:代码保密性差,一旦开发者把整个库克隆下来,就可以公开所有版本和版本信息;

二、配置信息

配置用户名:git config --global user.name “xxx”
配置邮箱:git config --global user.email “xxx"
配置大小写敏感:git config --global core.ignorecase false
查看配置信息:git config --list

三、基本原理

Git工作区:

1、Remote:远程仓库,托管代码的服务器(类似github)

2、Repository:仓库区,也就是本地仓库(.git文件夹),安全存放数据的位置,里面有提交所有版本的数据,其中HEAD指向最新放入仓库的版本;

3、index/Stage:暂存区,用于临时存放改动,实际上是一个文件,用于保存即将提交到文件列表的信息;

4、workspace:工作区,也就是编辑文件的位置;

在这里插入图片描述

根据上图理解提交代码的流程:

1、git add:将工作区的文件提交到暂存区;

2、git commit:将暂存区的文件提交到本地仓库;

3、git push:将本地仓库提交到远程仓库;

Git文件状态:

  • Untracked:未跟踪,在此文件夹中,但没有加到git库,不参与版本控制,通过git add状态变为staged;
  • Unmodified:文件已经入库,未修改,即版本库中的文件快照内容与文件夹一致这种类型的文件有两种取出,如果被修改,变为modified,如果被移除版本库git rm,变为Untracked;
  • Modified:文件已被修改,这个文件有两个去处,第一个是staged,第二个是unmodified;
  • Staged:执行git commit 则将修改同步到库中,这时库中的文件和本地文件虽为一致,文件为Unmodified。执行git reset HEAD filename取消暂存,文件状态为modified。

在这里插入图片描述

四、基本操作

在这里插入图片描述

下面就讲解一些简单操作:

  • 初始化本地仓库

    git init 	# 将本地文件夹变成一个本地仓库
    ll -ah		# 可以看到.git隐藏文件夹
    
  • 新增一个文件

    git add text.txt		# 新增一个文件
    git commit -m "add a text.txt"	# 提交信息
    
  • 如果提交新版本后有bug,回退版本

    git log			# 查看提交的日志
    git reset --head Head^		# 回退到上个版本,^代表回退几个版本(如果已经commit,需要这样回退
    
  • 分支与标签管理

    git checkout -b dev 	# 创建dev分支
    git branch				# 查看当前分支
    git checkout master		# 切换到master分支
    git merge dev			# 将dev分支合并到当前分支
    git branch -d dev		# 删除dev分支
    

五、总结

Git实际上操作命令并不多,主要是要理解其中的工作区和文件状态的概念,这个是Git最本质的部分;

我们在使用Git的时候不怕出错,实际上会有很多容错空间,也不怕突然有人删库跑路哈哈;

当然Git的命令远不止上面提到的这些,还有很多需要在实际使用中不断了解;

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

Git的原理及使用 的相关文章

  • Xcode - 使用 SSH 身份验证添加存储库时出现身份验证失败错误

    我正在尝试通过 Xcode gt 设置 gt 帐户添加存储库 但我被困在正确的地址上 我们的存储库地址非常简单 my domain com port project name 通过 SSH 密钥进行身份验证 有人可以帮助我了解这里发生了什么
  • 将各种提交合并为一而不合并

    是否可以加入各种提交 这是我的情况 我的应用程序在 OSX 10 6 和 10 7 中运行 我已经修复了 10 6 的一些内容 然后提交了 更改为 10 7 并再次修复修复程序 以便它们兼容 然后再次提交 然后返回到 10 6 并再次检查并
  • libgit2 返回:Refspec 'refs/heads/origin/HEAD' 在 TortoiseGit 中未找到错误

    启动 TortoiseGit 时出现此错误 无法获取所有参考文献 libgit2 返回 未找到 Refspec refs heads origin HEAD 虽然很烦人 但这并不妨碍我使用 TortoiseGit 然而 我想让它消失 因为它
  • 包括来自raw.github.com的js

    我有一个 github com 演示页面 链接到https raw github com master file js https raw github com master file js这样我就不需要总是复制 js文件转移到gh pag
  • Git 日志历史记录

    对于版本控制来说 重要的一件事是知道谁做了什么更改 如果某些内容发生了变化 而我不知道为什么要进行更改 我会查看历史并询问进行更改的人 当我探索 git 时 让我对这个功能有点紧张的一件事是它似乎很容易伪造 是什么阻止我将同事姓名 电子邮件
  • Git 将开发分支与生产版本的主分支合并

    我正在使用 Git 进行代码版本控制 我有一个开发分支 我正在其中进行所有肮脏的开发 每次我向世界发布生产版本时 我都想将其放在我的 master 分支下 问题是 每当我合并开发和 master 时 master 都会收到所有开发历史记录
  • 如何保持 git 存储库的公共和私有版本同步?

    我正在 Github 上发布一个开源 Rails 应用程序 可能是 MIT 许可证 我还想维护一个项目的私人分支 分支 我们将使用它作为付费服务的一部分 在这种情况下组织存储库的最佳方式是什么 而且 当我有两个项目的更新时 如何保持项目同步
  • git apply 不对文件进行任何更改

    我必须对我的存储库应用补丁并正在运行 git apply directory PWD xxxxx patch 由于我不会详细讨论的原因 我无法使用git am在这种情况下 我需要使用目录标志 吉特告诉我 gt git apply direc
  • 无法从 Git 扩展向 GitHub 进行身份验证?

    我只是在 Visual Studio 2010 中设置 Git 扩展 但无法真正使其工作 我无法进行身份验证 在 Git Extensions 中 如果我选择 Plugins gt GitHub 我可以添加用户 密码 API 令牌并选择 S
  • Git 会删除空文件夹吗? [复制]

    这个问题在这里已经有答案了 我已提交一个项目并将其推送到我的 GitHub 帐户 该项目包含以下部分文件结构 server conf some files java lib java 和 lib 文件夹为空 从 GitHub 下载我的项目时
  • Django 和 VirtualEnv 开发/部署最佳实践

    只是好奇人们如何结合 virtualenv 部署 Django 项目 更具体地说 如何使生产虚拟环境与开发计算机正确同步 我使用 git 进行 scm 但 git 存储库中没有 virtualenv 我应该这样做 还是最好使用 pip fr
  • 合并多个 git 存储库

    假设我有一个看起来像这样的设置 phd code phd figures phd thesis 由于历史原因 这些都有自己的 git 存储库 但我想将它们合并为一个 以稍微简化事情 例如 现在我可能会进行两组更改 并且必须执行类似的操作 c
  • 如何将 git-svn 与 svn+ssh url 一起使用

    我喜欢在cygwin中使用git svn clone使用我们公司 svn 存储库的命令 这个的网址是svn ssh svn
  • 仅将单个文件放入 git 子模块/存储库中

    我在 git 源代码存储库中有一个特定文件 其中包含生产设置 密码 我想限制此文件 以便只有制作团队的成员才能看到它 但是 我想控制它的变化 我考虑过在 git 中使用子模块 然后限制对新存储库的访问 然而 git 似乎需要子模块的整个子目
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • git tag --contains 如何工作?

    从几天前开始 我一直在尝试确定在哪个版本 由标签指定 中部署了特定修复 由提交指定 这里的一些帖子发布了这一点git tag contains是收集这些信息的方法 但是选项的文档 https git scm com docs git tag
  • 将主分支的提交合并到另一个分支,但不合并两个分支

    我有 git 存储库和一个主分支 我决定开发新功能 并且创建了新分支 new branch 我已经在 new branch 中创建了一些提交 但我还没有完成新功能 我决定修复 master 分支中的一些错误 因此我切换到 master 分支

随机推荐

  • 获取google chrome浏览器的安装位置

    今天 要获取chrome exe安装的路径 发现window XP 和 win 7 的用户路径是一样的 win7 C Users Administrator AppData Local Google Chrome Application 这
  • 2021-1-28Linux学习纪要

    linux 目录结构 bin 存放经常使用的指令 sbin 存放的是系统管理员使用的系统管理程序 home 存放普通用户的主目录 在linux中每个用户都有一个自己的目录 root 超级用户的主目录 boot 存放linux启动核心文件 包
  • 基于样本的性能分析

    基于样本的性能分析是一种性能优化技术 通过定期采集程序在运行时的信息 样本 来识别程序的热点区域或常用路径 这与基于插桩的分析相对 后者通过插入额外的代码来记录每一次函数或代码块的执行 基于样本的方法的主要优点是它对程序的性能干扰较小 但可
  • 类文件具有错误的版本号59.0应为52.0

    很笨的问题 运行 bat批处理文件的时候用管理员权限运行
  • shiro从1.6.0升级到1.7.1版本,请求路径中带有中文接口报400

    由于shiro1 6 0版本出现了安全漏洞 于是进行了版本的升级 升级到1 71 版本 但遇到了以下问题 1 访问某个接口的时候 返回状态码400 invaild request 2 访问路径为XX XXX params XXX包含中文 找
  • java---自动拆装箱

    一 什么是装箱 什么是拆箱 将一个值封装起来就是装箱 就是将一个基本类型转换为一个封装类 否则就是拆箱 而在从Java SE5开始就提供了自动装箱的特性 二 自动如何实现 来一个小栗子 public class Main public st
  • kettle循环取结果集进行处理方法一(使用js)

    需求 循环取结果集中的一行 再根据单个结果进行处理 此处实例 从test库取id字段结果集 存储 id 2 x id 到set value表中 此处使用js脚本 方法二 不使用js https blog csdn net weixin 44
  • 生成doc文件,并压缩进文件夹

    导出业务人员日志 SuppressWarnings null RequestMapping value exportEsComDailyList public void exportEsComDailyList RequestParam n
  • 提升开发效率的必备技能:Spring集成Mybatis和PageHelper详解

    目录 引言 一 Spring集成MyBatis 1 1 pom依赖 1 2 配置文件 1 3 Spring整合MyBatis 1 3 1 配置自动扫描JavaBean 1 3 2 配置数据源 1 3 3 配置session工厂 1 3 4
  • js 数组

    1 数组的创建 var arrayObj new Array 创建一个数组 var arrayObj new Array size 创建一个数组并指定长度 注意不是上限 是长度 var arrayObj new Array element0
  • pytorch CPU与GPU模型参数相互加载

    文章目录 1 模型保存以及加载方法 2 单 GPU 和 单 CPU 参数 模型相互加载 3 多 GPU 模型 参数 4 单 GPU or CPU 模型加载多 GPU 参数 5 单 GPU or CPU 加载 多GPU模型 参数 6 多 GP
  • linux下jdk的安装

    目录 获取文件下载地址 官网获取文件下载地址 下载文件到指定目录下并修改改文件名 卸载已经存在的JDK 查看系统是否安装JDK 卸载JDK 安装JDK 赋予权限 安装JDK 配置JDK的环境变量 在配置文件的最底部加上以下配置 重新刷新配置
  • Java实现多线程下载 URL以及URLConnection

    主线程 public class MultiThreadDown public static void main String args throws Exception 初始化Downutil对象 final DownUtil downu
  • linux中解压tar.gz或zip类型的文件到具体文件夹

    zip对应的解压缩命令为unzip 命令格式 unzip 选项 压缩包名 选项 d 指定解压缩位置 示例 unzip d tmp test zip 将tar gz文件解压到指定的目录中 tar zxvf tmp tar gz C tmp 在
  • WEB常见的扫描器具体使用方法

    常用的WEB扫描器 1 awvs Acunetix Web Vulnerability Scanner 简称AWVS 是一款知名的网络漏洞扫描工具 它通过网络爬虫测试你的网站安全 检测流行安全漏洞 现已更新到10 下载地址 链接 https
  • Cisco_路由器基础命令

    Cisco 路由器基础命令 1 接口描述 路由器F0 1 或S0 1 接口命名为ABC Router config interface fastEthernet 0 1 进入到接口fastEthernet 0 1 Router config
  • mysql基础查询

    mysql基础查询 进程的相关信息 查看information schema数据库中的PROCESSLIST表来获取正在执行的查询进程的信息 该表包含了当前连接到MySQL服务器的所有进程的相关信息 包括进程ID id 和进程名称 name
  • JavaScript 简介 及引用方式

    js的引用方式 3种 1 行内引用 通过在开标签中的事件属性引用js的函数 2 内部引用 通过在script标签中编写js代码使用 1 script标签可以写在页面任何位置 2 script标签通常使用在body中的最后 或者body的后面
  • csv怎么保存开头数字0_【EXCEL必知必会】大基本功[4]—分列以及CSV文件处理

    阅读全文大概需要4 5分钟 本文是专栏 Excel必知必会 的第四篇教程 如果想了解专栏内容规划 请参阅开篇 温馨提示 如果您已经特别熟悉Excel 大可不必再看这篇文章 或只挑选部分 文中对Excel的说明和操作基于Mac Excel20
  • Git的原理及使用

    一 简述 在Git出现之前 大部分公司还是用SVN进行项目管理的 这里来对比一下 集中式 SVN 集中式的版本控制系统都有一个单一的几种管理的服务器 保存所有文件的修订版本 而协同工作的人们都通过客户端连接到这台服务器 取出最新的文件或者提