1. 版本控制器Git

1.1 Git的简史

Git 的历史可以追溯到 2005 年1。当时 Linux 内核项目的开发团队一直使用 BitKeeper 进行版本管理,但由于一位 Linux 开发成员写了一个连接 BitKeeper 仓库的外挂,BitMover 公司决定中止 Linux 免费使用 BitKeeper 的授权1。Linux 团队与 BitMover 磋商无果后,Linux 内核的创始人 Linus Torvalds 决定开发自己的版本管理系统1。

2005 年 4 月 3 日,Linus Torvalds 正式开始开发 Git3。仅仅四天后,他就发布了 Git 的第一个可用版本(0.1),这个初始版本包含了 Git 的核心功能3。在接下来的几周内,Linus 和其他早期贡献者对 Git 进行了快速迭代和改进,逐步完善了其稳定性和功能3。

Git 的设计目标是实现分布式开发,解决现有集中式版本控制工具(如 CVS、Subversion)性能低下、分支管理不灵活以及依赖中央服务器等问题3。它具有所有行为都要校验、操作必须在毫秒级内完成等特性1。

随着开发的深入,Git 逐渐被大众接受1。2008 年 2 月,为 Git 提供托管服务的 GitHub 上线,进一步推动了 Git 的广泛应用1。此后,Git 成为了世界上最流行的分布式版本控制系统之一,被大量的初创企业、集体企业和跨国公司用于维护软件项目的源代码2。

1.2 Git的操作(以下操作是在Centos环境进行的)

1.2.1 安装 git

yum install git

1.2.2 在gitee创建项目

登录gitee创建仓库在创建好的项目页面中复制项目的链接, 以备接下来进行下载

下载项目到本地 

创建好一个放置代码的目录

git clone [url]

这里的url就是刚刚创建好的项目链接 

 1.2.3 git add

git add 命令是一个非常重要的操作,它的主要作用是将工作目录中修改过的文件或新建的文件,添加到暂存区(也称为 “索引”,英文为index,以便后续提交到版本库中。

git add [文件名]

1.2.4 git commit

git commit 命令用于将暂存区(staging area ,也叫索引 index)的内容提交到本地版本库,形成一个新的提交对象。

git commit -m "xxx"

提交的时候应该注明提交日记, 描述改动的详细内容. 

1.2.5 git push

 git push 命令用于将本地版本库中分支的提交推送到远程仓库,使得本地的代码变更可以与团队成员共享,或者备份到远程服务器上。

git push

需要填⼊用户名密码. 同步成功后, 刷新 gitee 页⾯就能看到代码改动了. 

git提交的时候,只会提交变化的部分! 

1.2.6 git pull

git pull 是一个常用命令,它主要用于从远程仓库获取最新代码,并自动尝试将获取到的代码合并到本地当前分支 ,在团队协作和多设备开发场景中发挥着重要作用。

git pull [文件名]

1.2.7 其他

git log //查看仓库的提交历史记录。
git status

显示工作目录、暂存区(也称为 “索引”)和本地仓库之间的状态差异。它能直观地告诉你哪些文件被修改、哪些被添加到暂存区、哪些是未被跟踪的新文件,帮助你在提交代码前了解当前工作进度。 

.ignore

 .gitignore 是一个至关重要的配置文件,用于指定 Git 应该忽略哪些文件或目录,避免它们被纳入版本控制。这在实际开发中非常实用,比如可以忽略自动生成的文件、编译产物、日志文件等无需版本管理的内容。

2.  调试器 - gdb/cgdb使用

2.1 样例代码

// mycmd.c
#include <stdio.h>
int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result;
}int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}

2.2 预备

程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程
序,默认是 release 模式。
要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序无法被
编译。

2.3 常见使用

开始: gdb binFile
退出: ctrl + d quit 调试命令
list/l:显示源代码
b:打断点
d:删断点
删断点只能根据断点编号来删,gdb不退出,断点编号依次递增。
p:打印指定变量的值
dispaly:指定变量的值常显示
命令
作⽤
样例
list/l
显⽰源代码,从上次位置开始,每次列出
10⾏
list/l 10
list/l 函数名
列出指定函数的源代码
list/l main
list/l ⽂件名:⾏号
列出指定⽂件的源代码
list/l mycmd.c:1
r/run
从程序开始连续执⾏
run
n/next
单步执⾏,不进⼊函数内部
next
s/step
单步执⾏,进⼊函数内部
step
break/b [⽂件名:]⾏号
在指定⾏号设置断点
break 10
break test.c:10
break/b 函数名
在函数开头设置断点
break main
info break/b
查看当前所有断点的信息
info break
finish
执⾏到当前函数返回,然后停⽌
finish
print/p 表达式
打印表达式的值
print start+end
p 变量
打印指定变量的值
p x
set var 变量=值
修改变量的值
set var i=10
continue/c        
从当前位置开始连续执⾏程序,直到遇到下一个断点或程序结束
continue
delete/d
breakpoints
删除所有断点
delete breakpoints
delete/d
breakpoints n
删除序号为n的断点
delete breakpoints 1
disable breakpoints
禁⽤所有断点
disable breakpoints
enable breakpoints
启⽤所有断点
enable breakpoints
info/i breakpoints
查看当前设置的断点列表
info breakpoints
display 变量名
跟踪显⽰指定变量的值(每次停⽌时)
display x
undisplay 编号
取消对指定编号的变量的跟踪显⽰
undisplay 1
until X⾏号
执⾏到指定⾏号
until 20
backtrace/bt
查看当前执⾏栈的各级函数调⽤及参数
backtrace
info/i locals
查看当前栈帧的局部变量值
info locals
quit
退出GDB调试器
quit

2.4 常见技巧

安装cgdb:
上⾯的基本调试还是⿇烦,虽然是⿊屏,但是还是想看到代码调试
推荐安装cgdb:
Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb

2-4-1 watch

执行时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,GDB 会暂停程序的执行,并通知使用者。

2-4-2 set var确定问题原因

更改⼀下标志位,假设我们想得到 +-result

2-4-3 条件断点

添加条件断点
注意:
条件断点添加常⻅两种⽅式:1. 新增 2. 给已有断点追加
注意两者的语法有区别,不要写错了。
新增: b 行号/⽂件名:行号/函数名 if i == 30(条件)
给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if

 

 

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

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

相关文章

synchronized 的使用和特性

synchronized 锁对象 普通方法 synchronized 锁普通方法时&#xff0c;其锁的对象是调用该方法的实例 public synchronized void method() { // 方法体 } 静态方法 静态方法的锁对象是所属的 class&#xff0c;全局只有一个。 public static synchronized void staticMetho…

Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)

在微服务架构中&#xff0c;Gin 常被用作 Web 层框架&#xff0c;而 Viper 用于管理配置文件&#xff0c;Zap 则提供高性能的日志记录功能。下面将详细介绍如何在 Gin Web 层集成 Viper 配置文件和 Zap 日志文件。 1. 项目概述 假设我们有一个基于 Go 语言的微服务项目&#…

IoTDB:专为物联网场景设计的高性能时序数据库

什么是IoTDB&#xff1f;IoTDB&#xff08;Internet of Things Database&#xff09;是一款开源的时序数据库管理系统&#xff0c;专为物联网&#xff08;IoT&#xff09;场景设计&#xff0c;由清华大学软件学院团队自研&#xff0c;天谋科技团队负责维护。它针对物联网数据的…

[netty5: MessageAggregator HttpObjectAggregator]-源码解析

在阅读这篇文章前&#xff0c;推荐先阅读 [netty5: ByteToMessageCodec & MessageToByteEncoder & ByteToMessageDecoder]-源码分析[netty5: HttpObject]-源码解析 100-continue 100-continue 是 HTTP/1.1 协议中的一种机制&#xff0c;用于客户端在发送大体积请求体…

前端学习1--行内元素 vs 块级元素(基础概念+案例实操)

一、内外边距学习&#xff1a;&#xff08;1&#xff09;简单理解&#xff1a;padding为内边距。padding不会影响元素的位置&#xff0c;只会调整元素的内容&#xff08;文字&#xff09;与边框之间的间距。margin为外边距。margin会影响元素在流式布局中的位置&#xff0c;改变…

Express + mysql2 + jwt 实现简单的登录鉴权

目前项目中使用Express 实现简单API功能&#xff0c;需要提供一套登录鉴权方案。这边是API侧实现 相关路由的登录鉴权。大体思路&#xff1a;就是&#xff0c;登录接口中通过jwt加密 token返回前端&#xff0c;前端其他接口把加密好的放入请求头Authorization中。中间件通过请求…

ReAct (Reason and Act) OR 强化学习(Reinforcement Learning, RL)

这个问题触及了现代AI智能体&#xff08;Agent&#xff09;构建的两种核心思想。 简单来说&#xff0c;ReAct 是一种“调用专家”的模式&#xff0c;而强化学习 (RL) 是一种“从零试错”的模式。 为了让你更清晰地理解&#xff0c;我们从一个生动的比喻开始&#xff0c;然后进行…

iTwinjs 4.10-4.11 更新

撤销更改 目前&#xff0c;撤销一个有缺陷的变更集的唯一方法是从 iModel Hub 中移除它&#xff0c;这可能会导致许多副作用&#xff08;无法撤销&#xff09;。一个更好的方法是在时间线中撤销变更集&#xff0c;并将其作为新的变更集引入。尽管这种方法仍然具有侵入性&#…

【CSS-15】深入理解CSS transition-duration:掌握过渡动画的时长控制

在现代网页设计中&#xff0c;平滑的过渡效果是提升用户体验的关键因素之一。CSS transitions 为我们提供了一种简单而强大的方式来实现元素在不同状态之间的平滑过渡&#xff0c;而 transition-duration 属性则是控制这些过渡效果时长的核心工具。本文将全面探讨 transition-d…

mysql-笔记

1. 安装mysql # 使用brew安装 brew install mysql# 查看是否安装成功 mysql -V 相关文档&#xff1a; mac&#xff1a;macOS下MySQL 8.0 安装与配置教程 - KenTalk - 博客园 Linux安装&#xff1a;linux安装mysql客户端_linux mysql 客户端-CSDN博客 2. 启动mysql 每次使…

Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践

Spring Boot启动优化7板斧&#xff1a;砍掉70%启动时间的魔鬼实践1. 延迟初始化&#xff1a;按需加载的智慧2. 组件扫描精准打击&#xff1a;告别无差别扫描3. JVM参数调优&#xff1a;启动加速的隐藏开关4. 自动配置瘦身&#xff1a;砍掉Spring Boot的"赘肉"5. 类加…

从0开始学习计算机视觉--Day08--卷积神经网络

之前我们提到&#xff0c;神经网络是通过全连接层对输入做降维处理&#xff0c;将输入的向量通过矩阵和激活函数进行降维&#xff0c;在神经元上输出激活值。而卷积神经网络中&#xff0c;用卷积层代替了全连接层。 不同的是&#xff0c;这里的输入不再需要降维&#xff0c;而…

解决阿里云ubuntu内存溢出导致vps死机无法访问 - 永久性增加ubuntu的swap空间 - 阿里云Linux实例内存溢出(OOM)问题修复方案

效果图报错通过对实例当前截屏的分析发现&#xff0c;实例因 Linux实例内存空间不足&#xff0c;导致操作系统出现内存溢出&#xff08;OOM&#xff09; 无法正常启动。请您根据 Code&#xff1a;1684829582&#xff0c;在文档中查询该问题对应的修复方案&#xff0c;并通过VNC…

Serverless JManus: 企业生产级通用智能体运行时

作者&#xff1a;丛霄、陆龟 概述&#xff1a;本文介绍如何使用 JManus 框架构建通用智能体应用&#xff0c;部署并运行在 Serverless 运行时&#xff0c;构建企业级高可用智能体应用的实践经验。基于阿里云 Serverless 应用引擎SAE 运行稳定高可用的智能体应用&#xff0c; 基…

MySQL的数据目录

导读&#xff1a;根据前面的所学知识&#xff0c;我们知道了InnoDB存储引擎存储数据的数据结构、存储过程&#xff0c;而被组织好的数据则被存储在操作系统的磁盘上&#xff0c;当我们在对表数据进行增删改查时&#xff0c;其实就是InnoDB存储引擎与磁盘的交互。此外&#xff0…

Web前端开发: :has功能性伪类选择器

:has功能性伪类选择器::has() 是 CSS 中的一个功能性伪类选择器&#xff0c;它允许开发者根据元素的后代元素、兄弟元素或后续元素的存在或状态来选择目标元素。它本质上是一个“父选择器”或“关系选择器”&#xff0c;解决了 CSS 长期以来无法根据子元素反向选择父元素的痛点…

深度学习8(梯度下降算法改进2)

目录 RMSProp 算法 Adam算法 学习率衰减 RMSProp 算法 RMSProp(Root Mean Square Prop)算法是在对梯度进行指数加权平均的基础上&#xff0c;引入平方和平方根。 其中e是一个非常小的数&#xff0c;防止分母太小导致不稳定,当 dw 或 db 较大时&#xff0c;(du)2,(db)2会较大&…

JAVA面试宝典 -《网络编程核心:NIO 与 Netty 线程模型详解》

网络编程核心&#xff1a;NIO 与 Netty 线程模型详解 文章目录网络编程核心&#xff1a;NIO 与 Netty 线程模型详解一、传统 BIO 模型&#xff1a;排队买奶茶的阻塞模式 &#x1f964;1.1 专业解释1.2 简单点比喻1.3 简单示例二、NIO 模型&#xff1a;智能叫号餐厅系统 &#x…

蓝桥杯 第十六届(2025)真题思路复盘解析

本文以洛谷平台所提供的题目描述及评测数据为基础进行讲解。 前言&#xff1a;这是本人的蓝桥杯试卷&#xff0c;大概排省一前40%的位置&#xff0c;实际上这届题目偏难&#xff0c;我没有做出太多的有效得分。我把当时的思路和现在学习的思路都复盘进来&#xff0c;希望给大家…

兰顿蚂蚁路径lua测试

兰顿蚂蚁local p0 local x,y,z0,7,0 local function add() local result,id Block:getBlockID(x,y,z)if id1 thenBlock:destroyBlock(x,y,z,false) pp90 elseBlock:setBlockAll(x,y,z,1,0) pp-90 end x,zx-math.floor(0.5math.sin(math.rad(p))),z-math.floor(0.5math.cos(m…