[oeasy]python0145_版本控制_git_备份还原

news2024/9/21 14:27:04

git版本控制

回忆上次内容

  • 上次我们了解了 try 的完全体
    • try
      • 尝试运行
    • except
      • 发现异常时运行的代码块
    • else
      • 没有发现异常时运行的代码块
    • finally
      • 无论是否发现异常最终都要运行的代码块

图片描述

  • 发现导入部分
    • 可以再分为两个子模块
    • 一个输入 a
    • 一个输入 b
  • 可以再拆分么?🤔

观察结构

  • 这是test目录目前的结构

图片描述

  • 想把get_fruits.py再拆成两个
    • get_apples.py
      • 输入apple数量
    • get_bananas.py
      • 输入banana数量

尝试保存版本

  • 再继续之前
    • 先把 目前的test目录 备份起来
  • 使用 git 进行版本控制
# 先进入test
cd test
# 观察位置
pwd
# 初始化
git init
#把目前apple文件夹下所有的都备份
git add .
# 备份
git commit
  • commit 遇到问题
    • 你是谁的问题

问题

图片描述

  • 提示需要用户名和邮箱
    • 因为工程可能是个多人合作的
    • 需要知道提交是谁做的
  • 如何设置用户名和邮箱呢?

第一次提交

  • 按提示录入邮箱和用户名
    • 这邮箱和用户名
      • 不一定是注册过的
    • 只是一个标记

图片描述

  • 然后git commit
    • 第一次 提交

第一次提交的注释

  • 终端会自动打开vim
    • 要求对提交做注释
    • 没有具体的要求
    • 写点什么提示之类的就行
    • 完成后:wq
    • 退出

图片描述

  • 这就把 代码目前的这个状态
    • 备份下来了
  • 这是 第一次提交

查看版本

#查看提交版本的日志
git log
  • 目前有一个提交 commit

图片描述

开始修改

  • 在test目录下
    • 新建get_apples.py

图片描述

  • :r get_fruits.py
    • 读取get_fruits.py
    • 到当前文件缓存

最终效果

图片描述

  • 把输入模块再拆分
    • 输入 apple数量 、get_apples.py
    • 输入 banana数量 、get_bananas.py
  • 调整输入函数
  • 这样可以运行么?

尝试运行

图片描述

  • 试验成功!
    • 可以正确执行
  • 但是这么写是有问题的!
  • 为什么?
    • 因为它不符合禅意
  • 啊?😲

zen 禅

  • Flat is better than nested.

    • 扁平胜于嵌套
  • 现在的控制结构:

  • 中控 main

    • 输入 get_fruits
      • 输入 a
        • get_apples
      • 输入 b
        • get_bananas
    • 处理 process
    • 输出 outprint
  • 结构太多出现了三层

图片描述

  • 好的程序是
    • 并排很多的
      • 而串起来的并不深
    • 高内聚
      • 低耦合

过度抽象

  • 没有必要嵌套成三层
    • 我们应该更多使用扁平
  • 两层能轻松解决的
    • 别弄到三层
  • tcp/ip 四层就能搞定的事
    • osi 非要搞到七层,一定不好做
  • 层与层之间的接口是很容易固化的
    • 这不是教条
    • 而是实际开发中的经验
  • 你见过那种层层传递过程中的繁琐和损耗么?
    • 想回滚到初始状态(init)
  • 还好做了版本控制

第二次提交

  • 先把当前的这个修改提交了
git add .
git commit
git log
  • 提交新Commit

图片描述

  • 系统还是会自动开vim来记录本版本的注释
  • :wq就可以保存注释

图片描述

  • 完成第二次提交

查看两次提交

  • git log

图片描述

  • 我们可以看到有两次提交
    • 第一次
      • 红框以内
      • 提交信息为 init
      • 特征码为 3153a6e…
    • 第二次
      • 黄框以内
      • 提交信息为 add two python files
      • 特征码为 1f6de17…

回滚

#查看commit提交的简写形式
git log --pretty=format:"%h - %an, %ar : %s"
#签出原来的提交
git checkout 第一次提交的特征码...

图片描述

  • 然后再签出老的那个
    • 3153a6e

前后对比

图片描述

  • 硬盘回到初始状态了
    • 新保留的分支 就不要了
  • git 就是这样的 版本控制软件
    • 可以恢复到
      • 任何 commit 过的时间点
      • 甚至是
        • 任何人 在任何时间点 commit 过的版本
    • 仿佛一个时光机
  • 在不同时间和不同人提交的版本间穿梭
  • 这次 为什么要 回到过去?
    • 这次回去的 原因 是
      • 扁平胜于嵌套

复杂

  • 多余的层级
    • 是 繁琐的
  • 奢华繁复
    • 是 堕落的开始

图片描述

  • 追求 美之为美

  • 孔雀为了美

    • 进化到了什么样子
      • 尾大不掉
  • 这种美并不符合

    • 客观规律
  • 繁文冗节只会造成辞藻的堆砌

    • 陷入到文字割裂的离散世界中去
    • 可世界本是连续的
  • 真善美中

    • 真 排第一

美之为美

  • 凡尔赛和圆明园
    • 都不是 励精图治的审美

图片描述

  • 金玉其外
  • 败絮其中
  • 金玉满堂
  • 莫之能守
  • 什么是能够自强的审美呢

简单

  • 断舍离
    • 枯山水
    • 说的都是化缘
  • 为道日损,损之又损,以至于无为
    • 无为而无不为

图片描述

  • 致虚极守静笃
    • 为的是蓄势待发

图片描述

  • 静观其变
    • 要留白 才能作画
  • 代码的演化 本身就是一种涅槃
    • 消珥过去的自己
    • 在迭代中获得新的生命

无为

  • 为无为
    • 才能 全面观察和蓄力
  • 味无味
    • 才能 有敏感的味觉
  • 事无事
    • 才能 有机敏的反应

图片描述

  • 静下来 品味
    • 禅茶一味
    • 感觉是一致的

一致

  • Explicit is better than implicit.
    • 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
  • Simple is better than complex.
    • 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
  • Complex is better than complicated.
    • 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
  • Flat is better than nested.
    • 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
  • 以上说的都是一回事:
    • 简单而且明确!
    • 形成了上面的观念就会发现代码的美与丑
    • 代码的审美来自于以上的判断

图片描述

  • Beautiful is better than ugly.
    • 优美胜于丑陋(Python 以编写优美的代码为目标)
  • 审美僵化是 可怕的
    • 保持 简单 且 明确
    • 就可以保持 天真的状态

总结

  • 使用了版本控制 git

    • 制作备份
    • 进行回滚
  • 尝试了 嵌套的控制结构

    • 层层 控制
    • 不过 非到不得以
    • 尽量不要 太多层次的嵌套
    • 虽然这样 从顶到底
    • 含义 明确
  • 扁平 难道就不能

    • 含义明确么?
  • 还可以 做点什么?

    • 让程序更加明确呢?🤔
  • 我们下次再说!👋

  • 蓝桥->https://www.lanqiao.cn/courses/3584

  • github->https://github.com/overmind1980/oeasy-python-tutorial

  • gitee->https://gitee.com/overmind1980/oeasypython

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

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

相关文章

【Python基础练习100题--第一篇:文件篇】

前言 这些题都是在B站的练习题,链接在这 对于刚学python的新手来说十分的适合, 可以加强和巩固我们的基础。 嘿嘿 一起噶油吧!🍉 🍉1.对学生成绩排序 # 这里对字典进行排序,同事使用到了sorted函数 # 这…

【安全工具】Httpx信息收集

文章目录 前言一、下载二、使用步骤1.帮助文档2.常用命令常用组合命令: 总结 前言 HTTPX 是一个功能强大的 HTTP 客户端工具,用于执行各种网络任务,例如发现 Web 应用程序漏洞、探测域名和端口等。它使用了 retryablehttp 库来运行多个探测器…

[计算机图形学]相机与透镜(前瞻预习/复习回顾)

一、相机 1.成像方法 成像方法有两种,合成和捕捉,我们之前所说的光栅化和光线追踪都属于合成的方法,也就是实际上不存在的东西。而另一种成像方法叫做捕捉成像,也就是把真实世界中存在的一些东西变成照片这就是捕捉成像&#xf…

【量化课程】01_投资与量化投资

文章目录 1.1 什么是投资1.1.1 经济意义上的投资1.1.2 投资的分类1.1.3 金融投资1.1.4 个人投资者投资品种1.1.5 投资VS投机 1.2 股票投资的基本流程1.3 常见的股票投资分析流派1.3.1 投资者分析流派 1.4 什么是量化投资1.4.1 量化投资基本概念1.4.2 量化投资的优势1.4.3 量化投…

C多线程、锁、同步、信号量

文章目录 一 线程函数1.1 创建线程1.2 线程退出1.3 线程回收1.4 线程分离:1.5 其他线程函数1.5.1 线程取消1.5.2 线程ID比较 二 线程同步2.1 互斥锁2.1.1定义2.1.2 初始化2.1.3 销毁2.1.4 加锁 、 常试锁、解锁2.1.5 互斥锁使用 2.2 死锁2.3 如何避免死锁2.4 读写锁…

05_从0运行,重定位,初始化,中断再到定时器

总结 这边简单讲讲,代码上电后从0开始发生了什么,为什么要重定位把代码复制到sdram, bin文件前面几条跳转函数都跳转去哪 中断产生后发生什么 重定位问题 1.为什么需要重定位 把程序从一个位置移到另一个位置 叫重定位 可以只重定位部分段的数据 也可以把所有的都重定位到sd…

Linux运维之shell基础

一.流程控制 1.if判断 基本语法: if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi注意事项: ①[ 条件判断式 ],中括号和条件判断式之间必须有空格②if 后要有空格 例如,现在写一个if.sh脚本文件 #…

echarts关于自定义饼图数据刷新和颜色渲染问题

在使用echarts的自定义饼图Customized Pie时,定义的动态数据会发生颜色无法渲染的问题,如下图所示: 该图表的颜色是根据itemStyle内的color属性而来,如下: itemStyle: {color: #4d90fe, /* 图表的颜色 */shadowBlur:…

【python知识】importlib包详解

importlib — The implementation of import — Python 3.11.3 documentation 目录 一、说明 二、 模块导入简介 2.1 最简单的 importlib用途 2.2 importlib 包的目的有三个 2.3 import_module() 和__import__() 三、高级模块使用 3.1 动态引入 3.2 模块引入检查 3…

SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范,以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT(JSON Web Token)是一种…

JavaWeb——HTML和CSS

HTML和CSS定义 标记语言 :比如XML:可扩展的标记语言&#xff0c;标签可以自己定义&#xff0c;解析时需要按照定义的规则去解析。 学习目的:掌握常见标签和常见样式的使用 HTML 结构: 特点: 1.不区分大小写&#xff0c;不管是<html>还是<HTML>都是一样的作用 …

错题笔记第一篇

目录 1. strlen的用法2. case3. switch4. 二分查找 1. strlen的用法 正确答案 &#xff1a;C strlen计算的是字符串的长度&#xff0c;二字符串是以\0结尾&#xff0c;而咱们并没有存储\0&#xff0c;后序的空间是未知的&#xff0c;strlen找不到\0就会一直找&#xff0c;所以它…

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console 首先需要明确的一点是从 VSCode 插件商店下载的 CMake 是默认打印输出的结果在 debug console 中的&#xff0c;就像下面这样&#xff1a; 可以看到&#xff0c;一个问题是在加载 dll 时候会频繁…

82. Python split方法-分割字符串

82. split方法-分割字符串 文章目录 82. split方法-分割字符串1. 什么是split( )函数2. split( )方法的语法格式如下&#xff1a;3. 实操练习4. 列表索引取值知识回顾5. 用split方法分解网址提取有效信息6. 从地址信息中拆分省、市、区信息 1. 什么是split( )函数 split[splɪ…

深度学习模型压缩与优化加速

1. 简介 深度学习&#xff08;Deep Learning&#xff09;因其计算复杂度或参数冗余&#xff0c;在一些场景和设备上限制了相应的模型部署&#xff0c;需要借助模型压缩、系统优化加速、异构计算等方法突破瓶颈&#xff0c;即分别在算法模型、计算图或算子优化以及硬件加速等层…

《LearnUE——基础指南:上篇—2》——GamePlay架构之Level和World

目录 听说世界是由多个Level组成的 1.2.1 引言 1.2.2 建造大陆&#xff08;ULevel&#xff09; 1.2.3构建世界&#xff08;World&#xff09; 1.2.4总结 听说世界是由多个Level组成的 1.2.1 引言 上小节谈到Actor和Component的关系&#xff0c;UE利用Actor的概念组成了世…

GitLab统计代码量

gitlab官方文档&#xff1a;https://docs.gitlab.com/ee/api/index.html 1、生成密钥 登录gitlab&#xff0c;编辑个人资料&#xff0c;设置访问令牌 2、获取当前用户所有可见的项目 接口地址 GET请求 http://gitlab访问地址/api/v4/projects?private_tokenxxx 返回参数 …

【文章学习系列之模型】Non-stationary Transformers

本章内容 文章概况总体结构主要模块Series Stationarization&#xff08;序列平稳化模块&#xff09;De-stationary Attention&#xff08;逆平稳化注意力模块&#xff09; 实验结果消融实验总结 文章概况 《Non-stationary Transformers:Exploring the Stationarity in Time …

Docker 存储

Docker 存储 docker 默认存储方式docker 持久化存储Volumes &#xff08;卷&#xff09;简介推荐使用情况 Bind mounts &#xff08;绑定挂载&#xff09;简介推荐使用情况 绑定挂载与卷注意点 docker 非持久化存储tmpfs mounts &#xff08;tmpfs 挂载&#xff09;简介推荐使用…

leetcode100——相同的树

文章目录 题目详情分析Java完整代码 题目详情 leetcode100 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例&#xff1a; 分析 主要想法…