Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

Commit 798728b

Browse files
committed
docs: Version Control & Git
1 parent 10fcbcf commit 798728b

9 files changed

Lines changed: 191 additions & 1 deletion

File tree

docs/lab/Git-Test/1.png

144 KB
Loading

docs/lab/Git-Test/2.png

97.7 KB
Loading

docs/lab/Git-Test/3.png

123 KB
Loading

docs/lab/Git-Test/4.png

120 KB
Loading

docs/lab/Git-Test/5.png

118 KB
Loading

docs/lab/Git-Test/6.png

115 KB
Loading

docs/lab/Git-Test/7.png

138 KB
Loading

docs/lab/Git-Test/8.png

126 KB
Loading

docs/lab/lab0.md

Lines changed: 191 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,193 @@
11
# Lab0: GitLab
22

3-
To Be Announced
3+
## 实验任务
4+
5+
- 下载与安装 Git
6+
- 学习基本的 Git & GitHub 操作
7+
- 加入 GitHub Classroom
8+
9+
## 前言:浅谈版本控制(Version Control)
10+
11+
假设你正在用 C++ 实现一个简易的学生成绩管理系统:
12+
13+
```shell
14+
StudentGradeManagementSystem/
15+
├── main.cpp
16+
├── include/
17+
│ ├── student.h
18+
│ └── grade.h
19+
├── src/
20+
│ ├── student.cpp
21+
│ └── grade.cpp
22+
├── tests
23+
│ └── test.cpp
24+
└── docs/
25+
└── README.md
26+
```
27+
28+
某一天,你灵机一动:如果我用 `unordered_map` 代替 `vector` 组织学生列表,这样查找某个学生的时间复杂度就从 $O(n)$ 降到了 $O(1)$ ,于是你开心地将项目重构了一遍。过了几天,当你想要将学生按照成绩排序时,你觉得应该改回 `vector`,但之前的文件已经被覆盖了,你不得不再重写一遍。
29+
30+
或许有同学养成了代码备份的好习惯——将重构前的文件保存为 `student_old.h``student_old.cpp`等等。但当类似的情景再次发生时,你的项目结构将变得相当混乱。
31+
32+
另一种情景是,假设你和 Zecyel 同学在协作这个项目,你们同时修改了 `main.cpp`,合并的时候只能将代码逐行对比,将他的部分代码复制进来。
33+
34+
### 什么是版本控制?
35+
36+
**版本控制(Version Control)** 是一种系统,用来 **记录文件内容的变化**,并且能在以后 **回溯到特定的版本**
37+
38+
就像「保存历史记录」一样,它能帮我们:
39+
40+
- 保存每次修改(而不是只保留最新版本)
41+
- 查看每次修改了什么
42+
- 回退到任意一次修改
43+
- 多人协作时合并修改
44+
45+
> [!note]
46+
>
47+
> - 你可以查看我们课程网页仓库的 [commit 历史](https://github.com/ICS-25Fall-FDU/ICS-25Fall-FDU.github.io/commits/main/),这里记录了我们的每一次修改。
48+
>
49+
> - 我们在生活中使用软件的版本号(例如 `v1.98.2`)则是 **「发行版」**
50+
> - 例如我们使用的校园助手 App,在历经界面优化、接口修复等多次修改形成一个稳定、完整的版本后,才会打上标签(tag)发行。
51+
52+
## Git
53+
54+
Git 是一种 **分布式版本控制软件**
55+
56+
### 下载与安装
57+
58+
- [Windows](https://git-scm.com/downloads/win)
59+
60+
- [macOS](https://git-scm.com/downloads/mac)
61+
62+
- [Linux](https://git-scm.com/downloads/linux)
63+
64+
> [!tip]
65+
>
66+
> - 本学期的大部分实验都在 Linux 系统上完成,使用 Windows 系统的同学请在虚拟机安装 Git,使用服务器的同学请在服务器上安装 Git。
67+
> - 检查安装是否成功。在虚拟机 / 服务器上输入 `git --version`,如果输出 `git version <版本号>`,则为安装成功。
68+
69+
### 配置
70+
71+
在 Git 中,`git config` 是用来 **配置 Git 行为和环境** 的命令。
72+
73+
> [!important]
74+
>
75+
> Git 每次提交都会记录“作者是谁”,需要配置用户名和邮箱:
76+
>
77+
> ```bash
78+
> git config --global user.name "用户名"
79+
> git config --global user.email "你的邮箱@example.com"
80+
> ```
81+
82+
::: details
83+
Git 的配置分为三个层级:
84+
85+
- 系统级(--system):对整个系统所有用户生效,配置写在 `/etc/gitconfig`
86+
87+
- 用户级(--global):对当前用户生效,配置写在 `~/.gitconfig`
88+
89+
- 项目级(默认):仅对当前仓库生效,配置写在 `.git/config`
90+
91+
(优先级:项目级 > 用户级 > 系统级)
92+
93+
在本学期实验中,使用 `--global` 即可。
94+
95+
其他的 Git 配置(可选):
96+
97+
```bash
98+
# 默认分支名
99+
git config --global init.defaultBranch main
100+
101+
# 别名
102+
103+
# 用 st 代表 status,以下类似
104+
git config --global alias.st status
105+
106+
git config --global alias.co checkout
107+
git config --global alias.br branch
108+
git config --global alias.cm "commit -m"
109+
110+
```
111+
112+
:::
113+
114+
### Git 基本操作
115+
116+
想要完全掌握 Git 的使用并不是一件轻松的事,但在本学期的实验中并不会遇到非常复杂的场景,因此我们只需掌握以下操作即可。
117+
118+
- `git init`
119+
120+
将本地项目初始化为一个 Git 仓库。如果你打开项目文件夹,会发现多出了一个 `.git` 文件夹。
121+
122+
- `git add`
123+
124+
将指定的改动添加到暂存区,例如:
125+
126+
```bash
127+
# 假设你处于 `/StudentGradeManagementSystem` 目录下
128+
129+
# 将 src 目录下的 student.cpp 添加到暂存区
130+
git add src/student.cpp
131+
132+
# 将当前目录下(及其递归子目录)的所有改动添加到暂存区
133+
git add -A
134+
135+
# 将当前目录下的所有后缀为 .cpp 的文件改动添加到暂存区(git add 支持字符串通配符)
136+
git add *.cpp
137+
```
138+
139+
> [!warning]
140+
>
141+
> 请一定注意你所在的目录!如果你在 `/src` 目录下执行 `git add -A`,那么 `/StudentGradeManagementSystem` 目录下其他的改动不会被添加到暂存区。
142+
>
143+
> ```bash
144+
> # 只暂存 /src 目录下的改动
145+
> user@linux:~/StudentGradeManagementSystem/src$ git add -A
146+
>
147+
> # 暂存整个项目的改动
148+
> user@linux:~/StudentGradeManagementSystem$ git add -A
149+
> ```
150+
151+
- `git commit`
152+
153+
将暂存区的内容提交到本地仓库。
154+
155+
`git commit` 一般有两种方式。
156+
157+
1. `git commit -m "your commit message"` 直接在命令行写 commit message。
158+
2. `git commit` 执行后 Git 会打开默认编辑器,在这里可以写多行 commit message,适合对一次复杂的提交作详细描述。
159+
160+
:::tip
161+
VS Code 原生集成了 Git,同时提供了一系列插件,例如 Git 提交树可视化插件 Git Graph。
162+
:::details
163+
以下是在 VS Code 中使用 Git 的演示:
164+
165+
1. 创建一个空文件夹 `Git-Test`
166+
2. 点击左侧边栏中的 `源代码管理` 图标。
167+
![1](Git-Test/1.png)
168+
169+
3. 点击 'Initialize Repository'(这一步等同于 `git init`)。
170+
4. 新建 `main.cpp`,会出现 `U` 标记,意为 `Untracked(未跟踪的)`
171+
![2](Git-Test/2.png)
172+
173+
5. 回到 `源代码管理` 界面,这里有两个 `+` 按钮。
174+
上方的 `+` 代表将项目中的所有更改添加到暂存区,相当于在项目目录下执行 `git add -A`
175+
下方的 `+` 代表将指定文件添加到暂存区,相当于执行 `git add main.cpp`
176+
![3](Git-Test/3.png)
177+
178+
6. 点击上方的 `+``main.cpp` 的标记变为 `A`,意为 `Added(已暂存)`
179+
![4](Git-Test/4.png)
180+
181+
7. 在文本框输入 commit message(可以是多行),点击提交,相当于执行 `git commit -m "Initial commit"`
182+
![5](Git-Test/5.png)
183+
184+
8. 修改 `main.cpp`。这时 `main.cpp` 的标记会变为 `M`,意为 `Modified(已修改)`
185+
![6](Git-Test/6.png)
186+
187+
9. 重复上述暂存、提交操作。
188+
![7](Git-Test/7.png)
189+
190+
10. 点击下方的 `Git Graph`,可以查看 Git 提交树。
191+
![8](Git-Test/8.png)
192+
193+
:::

0 commit comments

Comments
 (0)