目录
[二、Git 的核心概念与价值](#二、Git 的核心概念与价值)
[1. 什么是版本控制?](#1. 什么是版本控制?)
[2. 分布式(DVCS)的威力](#2. 分布式(DVCS)的威力)
[🛠️ 三、Git 的三大核心区域](#🛠️ 三、Git 的三大核心区域)
[🚀 四、Git 基本操作实战(三板斧)](#🚀 四、Git 基本操作实战(三板斧))
一、进度条小程序
在有了前面的基础(缓冲区,回车换行)后,我们可以来实现一下进度条的实现
还是三个文件 : processBar.c processBar.h main.c
bash
[txf@VM-4-5-centos processbar]$ vim processBar.h
bash
1 #pragma once
2
3 #include<stdio.h>
4 extern void processbar();
bash
[txf@VM-4-5-centos processbar]$ vim processBar.c

测验一下后没有问题,开始编写
bash
processBar.h
1 #pragma once
2
3
4 #include<stdio.h>
5 #define size 102
6 #define style '$'
7 extern void processbar();
bash
[txf@VM-4-5-centos processbar]$ vim processBar.c
1 #include"processBar.h"
2 #include<string.h>
3 #include<unistd.h>
4 void processbar()
5 {
6 char bar[size];
7 memset(bar,'\0',sizeof(bar));
8 int cnt=0;
9 while(cnt<=100)
10 {
11 printf("%s\r",bar);//没有\n,就没有了立即刷新,因为显示器模式是行刷新
12 fflush(stdout);
13 bar[cnt++]=style;
14 sleep(1);
15 }
16 }
- \n : 代表着回车换行,立即刷新缓冲区里的内容
- \r : 只回车,等程序结束后,或者缓冲区满了,才刷新缓冲区的内容
- fflush(stdout) : 强制刷新缓冲区
实现效果:

bash
[txf@VM-4-5-centos processbar]$ ./processbar


但感觉是不是太慢了
可以把sleep 换成 unsleep : 秒-> 微秒
1秒=1000000微秒
在加上个[ ],以及填充效果


怎样实现出百分比的效果呢
bash
printf("[%-100s][%d%%]\r",bar,cnt);//没有\n,就没有了立即刷新,因为显示器模式是行刷新
- %% : 才会打印%
实现效果 :


那如果我想加上一个旋转光标,该怎么实现呢

bash
#include"processBar.h"
#include<string.h>
#include<unistd.h>
const char* lable="|/-\\";
void processbar()
{
char bar[size];
memset(bar,'\0',sizeof(bar));
int len=strlen(lable);
int cnt=0;
while(cnt<=100)
{
printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]);//没有\n,就没有了立即刷新,因为显示器模式是行刷新
fflush(stdout);
bar[cnt++]=style;
usleep(1e5);
}
printf("\n");
}
实现效果 :

我们可以变一下风格
bash
#include"processBar.h"
#include<string.h>
#include<unistd.h>
const char* lable="|/-\\";
void processbar()
{
char bar[size];
memset(bar,'\0',sizeof(bar));
int len=strlen(lable);
int cnt=0;
while(cnt<=100)
{
printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]);//没有\n,就没有了立即刷新,因为显示器模式是行刷新
fflush(stdout);
bar[cnt++]=style;//style 为 '-'了
if(cnt<100)
bar[cnt]='>';
usleep(1e5);
}
printf("\n");
}

Git 本质上是一个分布式版本控制系统,你可以把它想象成一个超级精密的"时光机"和"团队协作神器"。它能帮你记录代码的每一次改动,随时回退到历史版本,并高效地与他人协同开发,而每个人的电脑上都有一份完整的项目"全息档案"(即完整的仓库和历史记录)。接下来,我将带你从基础概念到实战操作,一步步掌握这个开发者必备的利器。
二、Git 的核心概念与价值
1. 什么是版本控制?
版本控制可以理解为一个"智能备份系统"。它会记录你对项目文件(代码、文档等)的所有修改历史,允许你:
- 回溯历史:随时查看或恢复到任何一个过去的版本(比如昨天的代码,或者上周的报告)。
- 协同工作:多个人可以同时修改同一个项目,Git 能智能地帮你们合并修改,而不是互相覆盖。
- 隔离实验:你可以创建一个独立的"分支"来尝试新功能,如果失败了,直接丢弃即可,完全不影响主项目(主分支)。
💡 举个例子:就像你写论文,从 v1.0.doc 到 v1.0_final.doc,再到 v1.0_final_really.doc... Git 帮你自动管理这些版本,让你随时能找到"上周二下午三点那个能跑的版本"。
(ps: git : 版本控制器
什么叫版本控制,就是把你写的代码版本的v1 ,v2 ,v3 ;在你的电脑的一个磁盘中创建一个目录来保存这些不同版本的代码,git就负责这件事,这个目录叫做本地仓库,把本地仓库代码放到云服务器上的目录中存着,这个云服务器上的目录叫做远端仓库
git是具有网络功能的版本控制器,开源,客户端和服务端是一体的)
2. 分布式(DVCS)的威力
Git 是"分布式"的,这意味着:
- 人人都是主角:每个人的电脑上都有一个完整的代码仓库,包含全部的历史记录。
- 离线也能工作:你可以在没有网络的情况下提交(commit)代码、查看历史、创建分支。
- 安全可靠:因为每个人的电脑都是一个完整的备份,即使中央服务器宕机,代码也不会丢失。
🛠️ 三、Git 的三大核心区域
理解 Git 的工作流程,关键在于明白它有三个工作区域:
- 工作区(Working Directory)
你当前正在编辑的文件所在的目录,就是你的工作区。这里是你写代码、改文档的地方。 - 暂存区(Staging Area / Index)
这是一个"待办事项清单"。当你用git add命令后,你告诉 Git:"我准备把这部分修改纳入到下一次的提交中"。它让你可以精确控制哪些修改需要被提交。 - 本地仓库(Local Repository)
当你执行git commit后,暂存区里的修改就会被永久地保存到你的本地仓库中,成为一个新的"版本快照"。
📌 简单流程 :修改文件(工作区) →
git add(暂存区) →git commit(本地仓库)
🚀 四、Git 基本操作实战(三板斧)
假设你已经安装好了 Git(通常 sudo apt install git 或 sudo yum install git 即可),我们来走一遍最常用的流程
git如何使用?
首先下载git
bash
[txf@VM-4-5-centos ~]$ sudo yum install git
然后到gitee 中复制新创建的仓库地址

这里可以看到在gitee中创建的仓库 : linux

bash
[txf@VM-4-5-centos ~]$ cd linux

当我们想上传我们的代码时,怎么办
拷贝文件到当前目录 .

但是当前这个代码并没有被仓库管理起来,怎样添加到本地仓库
bash
[txf@VM-4-5-centos linux]$ git add .
[txf@VM-4-5-centos linux]$ git commit -m "完成最简单版本的进度条"
再推送到远端仓库
bash
[txf@VM-4-5-centos linux]$ git push
- 注意 add 是添加新增的部分到文件中,原始文件做了修改,都是要add的
- add是托管到本地仓库,push是推送到远端仓库
五、git的其他问题
查看git的提交记录
bash
[txf@VM-4-5-centos linux]$ git log

查看git的提交状态 : git status
我们再来看gitigore
.gitignore 文件
这个文件用来告诉 Git 哪些文件不要纳入版本控制,比如编译生成的临时文件、日志、IDE 配置等。
在项目根目录创建 .gitignore 文件:

如果有文件的后缀在这里面的,那么这个文件不会被添加到仓库中(注意通配符*不要忽略了)
小提示 : 首次使用git的提交需要配置
