🌟想了解这个工具的其它相关笔记?看看这个:[网安工具] 版本控制系统 —— Git · 使用手册
0x01:Git 概念解析 —— 版本仓库
Git 的版本仓库是存储项目代码及其历史变更的核心区域,它分为本地仓库和远程仓库两种:
0x0101:本地仓库
本地仓库位于开发者的计算机上,是通过克隆远程仓库或初始化新项目创建的。它里面包含了项目的所有文件、目录以及特定版本的历史记录,这些记录以一系列快照的形式存储,每个快照都对应了一次提交操作,记录代码在特定时间点的状态。
本地仓库为开发者提供了一个独立的开发环境,开发者可以在其中自由地进行代码修改、添加新功能或修复遗留问题,而不会影响到其他开发者的开发工作。
0x0102:远程仓库
远程仓库通常托管在服务器上,如 GitHub、GitLab 或 Bitbucket 等代码托管平台。它是团队协作开发的中心枢纽,用于存储项目的最新版本和完整历史记录。开发者可以通过网络将本地仓库的更改推送到远程仓库,也可以从远程仓库拉取其他开发者的更改到本地仓库。这种机制使得团队成员之间能够方便地共享代码、协同工作,并保持项目版本的一致性。
远程仓库还提供了额外的功能,如代码托管、代码审查、问题跟踪等,进一步促进了团队的开发效率和代码质量的提升。
“版本仓库” 在本地的表现其实就是一个文件夹,只不过这个文件夹被 Git 管理起来了,在该文件夹中对每个文件的修改、删除,Git 都能进行跟踪,这可以方便我们未来在某一时刻进行回溯操作。
0x02:Git 版本仓库 —— 初始化版本仓库
接下来我们以 Linux 为例,演示一下如何创建一个版本仓库(Windows 图形化就更简单了,流程类似)。创建版本仓库主要分为两步:
-
新建一个文件夹 => 这个文件夹就是我们后续存放项目的地方。
-
将该文件夹声明为 Git 版本仓库 => 让文件夹中的内容被 Git 管理起来。
0x0201:新建文件夹
前面我们介绍了,Git 仓库的表现形式就是一个文件夹,所以嘞,我们先建一个空的文件夹,Linux 中创建空文件夹的命令如下(Windows 就是右击新建咯):
mkdir gitTest # 创建 gitTest 文件夹
cd gitTest # 进入 gitTest 文件夹
pwd # 打印当前工作目录
注意:如果你使用 Windows 系统,为了避免后期遇到各种奇奇怪怪的错误,请确保目录名(包括父目录)不包含中文。
0x0202:将文件夹变成 Git 仓库
创建了文件夹还不行,我们还得把这个文件夹通过下面的命令变成 Git 可以管理的仓库才行:
git init # 初始化一个新的 Git 仓库在当前目录
如上,运行完命令,它就显示我们初始化了一个空的 Git 仓库在 XXX 目录下。如果我们此时查看当前的文件夹,会发现该文件夹下多了个 .git
文件夹,该文件夹就是 Git 用来跟踪管理版本库的。没事的时候千万别动该目录,不然改乱了,就把 Git 仓库给破坏了。
其实,我们初始化 Git 仓库的时候也不一定非得在一个空文件夹中初始化,其实选择一个有东西的文件夹也是可以的,不过嘞,我们现在还在学习,就别拿有数据的文件夹乱搞了。
0x03:Git 文件管理 —— 将文件添加到版本库中
0x0301:Git 文件管理 — 注意事项
1. Git 无法跟踪二进制文件的改动
这里首先声明一下,所有的版本控制系统,只能跟踪文本文件的改动,比如 TXT 文件、网页、所有的程序代码等等,Git 也不例外。版本控制系统可以告诉你每次发生的改动,比如在第 1 行新增了一个单词 “Hello World”,在第 3 行删除了一个单词 “READ”。
而像图片、视频这些二进制文件,虽然也能由版本控制系统管理,但是没办法跟踪文件的变化(二进制文件,改变的是底层的二进制位,你就是能发现变了,你也不知道意义是啥)。
不幸的是,Microsoft 的 Word 格式就是二进制的,因此,版本控制系统是没办法跟踪 Word 文件的改动的,这也是为啥,GitHub 上的文章多以 Markdown 格式书写(Markdown 的本质就是 TXT 文件 + 特殊意义的标识符)。
2. 文本编码问题
因为文本是有编码的,比如中文常用的有 GBK 编码,日文有 Shift_JIS 编码,如果没有历史遗留问题,强烈建议使用标准的 UTF-8 编码,这样会减少冲突。
UTF-8 是针对 Unicode 的一种可变长度字符编码,而 Unicode 又是万国码(所有国家以及特殊字符它都支持),所以十分推荐使用 UTF-8 编码编写文本内容。
3. Windows 记事本遗留问题
不推荐使用 Windows 自带的 记事本 来编辑文本文件。这是因为记事本在保存 UTF-8 编码的文件时,会自动在文件开头添加 0xefbbbf
字符(即 UTF-8 的字节顺序标记,BOM)。这种行为可能会引发一些问题,例如网页第一行出现多余的 “?” 字符,或者正确编写的程序在编译时因无法正确识别文件编码而报错。
相比之下,Notepad++ 和 Visual Studio Code 是两款非常优秀的替代工具。它们不仅功能强大,支持多种编程语言和文件格式,还具备代码高亮、语法检查、智能提示等实用功能,能够有效提升开发效率。更重要的是,这两款工具都是免费的,完全能够满足日常的文本编辑和代码开发需求。
0x0302:Git 文件管理 — 添加文件至版本仓库
言归正传,我们先在被 Git 管理的文件夹中创建一个 GitStudyLog.txt 文件,内容如下:
[2025/04/25] 学习内容: Git 备注: 今天是个学习 Git 的好日子
git init # 初始化一个新的 Git 仓库在当前目录
虽然上面的文件我们是在被 Git 管理的文件夹中创建的,但其实,Git 还没有记录下这次的变化。是不是有点懵?输入下面这个命令,查看一下当前 Git 仓库的状态:
git status # 检查当前 Git 仓库的状态
如上,git status 的回显提示我们,“暂时没有任何提交的内容,但存在未被跟踪的文件”。这个 “未被跟踪” 的文件,其实就是 GitStudyLog.txt(至于 “未提交” 我们后面讲)。
我们可以通过下面的命令,将 GitStudyLog.txt 添加到 Git 仓库中(其实是 Git 的暂存区,这个后面会讲),让 Git 跟踪该文件的变化:
git add <文件名> # 将文件提交到 Git 仓库,让 Git 跟踪文件变化
### 示例: git add GitStudyLog.txt
如上,通过 git add
我们成功把 GitStudyLog.txt 添加进了 Git 仓库的管理列表,但是你注意到了 “Changes to be committed” 这个东东了嘛,它的意思是 “要提交的更改”。
也就是说,通过 git add
我们仅仅是让 Git 能追踪该文件的变化了,但具体这次改变了啥,我们还未进行提交。那我们该如何让 Git 记录此次更改呢?通过下面这个命令:
git commit -m "2025/04/25 - GitStudy - 今天学习了创建版本库"
# -m 后跟的是本次提交修改的备注,方便我们以后进行版本回溯的时候查看
如上,Git 执行完成后告诉我们 1 file changed
:一个文件被改动(我们刚刚新增了一个 GitStudyLog.txt);2 insertions(+)
:插入了两行内容(GitStudyLog.txt 中有两行内容)。
此时,我们再此查看 Git 仓库的状态:
如上,它提示,我们当前在主分支,已经没有啥好提交的了,工作环境是干净的(说白了就是相较于上次修改后,我们目前没有对当前文件夹中的任何内容进行修改)。
0x04:Git 文件管理 —— 本章小结 & 问题解决
本章中我们一共学习了三个知识点:
-
如何初始化本地 Git 仓库。
-
如何查看当前 Git 仓库的状态。(这部分算是提前讲,后面也会涉及到)
-
如何让 Git 仓库跟踪文件变化,并将具体变化提交到 Git 仓库中进行记录。
相关命令以及速记如下:
### 初始化一个 Git 仓库
git init
### 查看当前 Git 仓库状态
git status
### 将文件添加到 Git 仓库
git add <file> # 让 Git 追踪指定文件变化,该命令可以使用多次,添加多个文件
git commit -m <message> # 将修改提交到 Git 仓库中,同时对本次修改进行备注操作
可能小伙伴会有一个疑问,为什么 Git 添加文件需要 add
与 commit
两步呢?好麻烦啊。这其实是因为 commit
可以一次提交多个修改,所以我们可以分多次 add
不同的文件,最后再一次提交,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."