Linux基础开发工具(下)

版本控制器Git

Git 是一个 分布式版本控制系统,简单来说,就是一个能「记录代码每一次修改、回溯历史、多人协作开发」的工具。

举个生活化的例子:你写一篇博客,第一次写了初稿,后来修改了几个段落(第二版),觉得不满意,又改回了初稿的部分内容(第三版)。如果没有备份,你很可能会弄丢某一版的内容,也记不清自己到底改了什么。

而Git就相当于一个"智能备份+历史记录本",它会记录你对代码(或文件)的每一次修改:谁改的、改了什么、什么时候改的,哪怕你改乱了、删错了,也能一键回溯到之前的任意一个版本,再也不用怕"改崩了回不去"。

这里要注意两个关键:

  • 「分布式」:每个人的电脑上都有完整的代码版本库,不用依赖中央服务器(比如GitHub),就算断网,也能正常修改、提交代码,联网后再同步即可。

  • 「版本控制」:核心就是"管理版本",把每一次修改都当成一个"版本快照",随时可以切换、对比、恢复。

Git的强大之处

Git 比普通版本管理工具强在哪里?它像一个「全能游戏存档系统」,但能力远超游戏存档:

  • **可以随时 "读档"**不管代码改得多乱,只要之前存过档(commit),就能一键回到任意历史版本,再也不怕写崩了回不去。

  • **可以开 "平行宇宙"(分支)**想尝试新功能、改 bug、做实验?直接开个新分支随便造,玩坏了删掉就行,完全不影响主线稳定版本。

  • **可以多人 "联机存档"**队友写的代码、你写的代码,Git 能自动合并进度;就算两人改了同一处,也会提示冲突,让你们一起决定最终版本。

  • 可以离线存档,联网再同步断网也能提交、建分支、看历史,联网后再同步给队友,不受网络限制。

  • 存档轻量又快每次提交只存改动部分,不重复存完整文件,哪怕大项目也秒级响应,不占空间。

Git 与 Gitee / GitHub 关系

  1. Git 是工具 Git 是本地版本控制软件,装在自己电脑上,负责:写代码、记录版本、建分支、本地提交、回退代码。

  2. pullGitHub / Gitee 是远程平台云端代码仓库网站,用来存放远程代码仓库。

  3. 三者关系

  • Git:干活的工具(本地)
  • GitHub/Gitee:存代码的云端仓库(远程)
  • 你用 Git 把本地代码推送(push) 到 Gitee/GitHub,也可以从平台**拉取(pull)**代码到本地。

4.大白话总结

Git = 工具

Gitee/GitHub = 云端仓库服务器

没有Git 不能上传代码;

没有 Gitee/GitHub 只能自己本地用,无法云端备份、多人协作。

安装Git及提交

bash 复制代码
yum install git

一、必须先建本地目录(文件夹)

必须自己先建好本地文件夹,再进入这个文件夹,才能执行初始化!

流程顺序是:

  1. 新建文件夹(自己建)
  2. 进入文件夹
  3. 初始化 Git 仓库

二、初始化本地仓库是什么意思?

git init 的作用:让当前这个文件夹,变成 Git 能管理的仓库。

不执行 git init,Git 不认识这个文件夹!

三、正确完整步骤(你照着做永远不会错)

1. 先建一个项目文件夹

bash 复制代码
mkdir myproject

2. 进入这个文件夹(关键!)

bash 复制代码
cd myproject

3. 初始化 Git 仓库(让它变成 Git 项目)

bash 复制代码
git init

4. 把代码放进来

比如你放 .c文件、``.h文件

5. 后续提交

bash 复制代码
git add .#添加当前文件夹的所有文件
git commit -m "第一次提交/改动信息"

四、一句话总结

先建文件夹 → 进入文件夹 → 再 git init

不能在外面初始化! 不能没有文件夹就初始化!

三板斧理解

1.git add

将代码放到刚才下载好的⽬录中

bash 复制代码
git add [⽂件名]

将需要⽤git管理的⽂件告知git

2. git commit

提交改动到本地

bash 复制代码
git commit -m "改动内容"

最后的"."表⽰当前⽬录

提交的时候应该注明提交⽇志,描述改动的详细内容

3. git push

同步到远端服务器上

bash 复制代码
git push

需要填⼊⽤⼾名密码

同步成功后,刷新Github/Gitee⻚⾯就能看到代码改动了

配置免密码提交git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客

平常使用就这4步:

  • git add 放到暂存区
  • git commit 本地保存
  • git push 上传云端
  • git pull 下载云端

GIt常用指令

操作功能 命令 作用说明
初始化本地仓库 git init 把当前文件夹变成 Git 仓库
查看状态 git status 查看文件修改、暂存情况
添加到暂存区 git add 文件名 / git add . 把修改的文件加入暂存区
提交到本地仓库 git commit -m "备注" 保存版本,生成快照
查看提交日志 git log 查看所有提交记录
绑定远程仓库 git remote add 别名 仓库地址 本地关联 Gitee/GitHub
拉取远程代码 git pull 下载更新远程最新代码
推送本地代码 git push 上传本地代码到远程仓库
克隆远程项目 git clone 仓库地址 下载别人完整项目到本地
新建分支 git branch 分支名 创建新分支
切换分支 git checkout 分支名 切换到指定分支
合并分支 git merge 分支名 把其他分支合并到当前分支
撤销暂存 git reset HEAD 文件名 撤回 add 操作,不删除修改
临时保存修改 git stash 临时存放未提交代码
恢复临时修改 git stash pop 恢复暂存的临时代码

调试器-gdb/cgdb使⽤

GDB 是什么?

GDB = GNU Debugger Linux 下最常用的命令行调试工具,用来:

  • 找程序崩溃原因
  • 单步执行代码
  • 查看变量值
  • 定位逻辑错误
  • 断点调试

CGDB 是 GDB 的升级版 ,带代码高亮、分屏显示,更好用、更直观。因此,下面我就用CGDB讲解。

CGDB安装:

bash 复制代码
sudo yum install -y cgdb

先准备一份测代码:

cpp 复制代码
#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;
}

在Linux中,gcc/g++编译方式默认是在release模式下进行编译,而cgdb只能编译debug版本的可执行程序,因此我们得在编译时加入-g选项,切换到debug模式:

bash 复制代码
gcc -g test.c -o test

然后启动cgdb进行调试即可:

bash 复制代码
cgdb ./test

我们就用上面代码进行调试:

进入cgdb:

打断点

在命令行输入b [要打断点的行数/函数名]

结果:

查看断点信息:i b 来查看所有的断点信息

删除断点:输入d [断点编号]就能删除对应断点

cgdb在不退出的情况下,删除断点其余断点序号不变,增加断点时,断点序号递增:

打了断点之后就是执行程序进行调试

输入r,程序会从main函数开始,自动在第一个断点处停下来。如果你没有打断点,那么运行后会直接结束程序

上面已经跳到第一个断点,如果后面还有断点,输入c 就会跳到下一个断点处

逐过程,逐语句

在vs里逐过程为F10,逐语句为F11

cgdb里,逐过程为n(一次跳过一个函数),逐语句为s(一次跳过一行代码)。

CGDB / GDB 常用指令对照表

简写 完整命令 功能说明
l list 查看源代码,上下翻代码
l 行号 list 行号 查看指定行附近代码
b 行号 break 行号 在指定行打断点
b 函数名 break 函数名 在函数开头打断点
info b info breakpoints 查看所有断点
d 编号 delete 编号 删除指定断点
r run 从头运行程序,停在断点
n next 逐行执行,不进入自定义函数
s step 逐行执行,进入自定义函数内部
c continue 继续运行,跳到下一个断点
finish finish 直接跳出当前函数
p 变量 print 变量 打印 / 查看变量值、数组、指针
p &变量 print &变量 查看变量内存地址
display 变量 display 变量 每次单步自动打印变量
undisplay undisplay 取消自动打印
ptype 变量 ptype 变量 查看变量类型
ctrl + c --- 强制暂停卡死 / 死循环程序
set args set args 参数 给程序设置命令行参数
q quit 退出 CGDB / GDB

补充 CGDB 专属快捷键(好用)

  • 上方代码区:方向键、PgUp/PgDown 滚动代码
  • Esc 切到代码区;按 i 切回底部命令区
  • 断点行会标红,直观好找

监视变量

watch

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

删除监视跟删断点操作一样。

如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如 果变化了,就会通知你.

display

每次停下都自动显示该变量

display 变量

set var

在调试中修改变量的值

set var 变量=值

相关推荐
feng14562 小时前
OpenSREClaw - 故障复盘和变更评审双 Agent 案例
运维·人工智能
linux修理工3 小时前
chrome官方下载地址
运维·服务器
无忧智库3 小时前
IT运维正在经历一场真正的范式革命:从告警风暴到AIOps自主自愈的完整工程解构(WORD)
运维
笨笨饿3 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
cn_lyg3 小时前
Linux的入门级常用操作命令
linux·运维·服务器
geneculture4 小时前
《智能通信速分多次传输技术(VDMT)》专利文件的全文汉英双语对照版本
服务器·网络·人工智能·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·人机间性
就叫飞六吧4 小时前
TOML vs YAML:为什么 Cargo 选择 TOML?
linux·运维·服务器
MiNG MENS4 小时前
nginx 代理 redis
运维·redis·nginx
IMPYLH4 小时前
Linux 的 test 命令
linux·运维·服务器·chrome·bash