Skip to content

Commit 40d152a

Browse files
committed
Added questions and fixed errors
1 parent bb2e86e commit 40d152a

File tree

1 file changed

+69
-43
lines changed

1 file changed

+69
-43
lines changed

docs/lab/lab0.md

Lines changed: 69 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ StudentGradeManagementSystem/
3131

3232
另一种情景是,假设你和 Zecyel 同学在协作这个项目,你们同时修改了 `main.cpp`,合并的时候只能将代码逐行对比,将他的部分代码复制进来。
3333

34+
> [!tip]
35+
>
36+
> 你之前有过多人协同开发的经历吗?如果有,你们是使用什么方式分工协作的?
37+
3438
### 什么是版本控制?
3539

3640
版本控制(Version Control)是一种用来记录文件内容的变化,并且能在以后回溯到特定版本的系统。
@@ -44,10 +48,11 @@ StudentGradeManagementSystem/
4448

4549
> [!note]
4650
>
47-
> - 你可以查看我们课程网页仓库的 [commit 历史](https://github.com/ICS-25Fall-FDU/ICS-25Fall-FDU.github.io/commits/main/),这里记录了我们的每一次修改。
51+
> 你可以查看我们课程网页仓库的 [commit 历史](https://github.com/ICS-25Fall-FDU/ICS-25Fall-FDU.github.io/commits/main/),这里记录了我们的每一次修改。
4852
>
49-
> - 我们在生活中使用软件的版本号(例如 `v1.98.2`)则是“发行版”。
50-
> - 例如我们使用的校园助手 App,在历经界面优化、接口修复等多次修改形成一个稳定、完整的版本后,才会打上标签(tag)发行。
53+
> 我们在生活中使用软件的版本号(例如 `v1.98.2`)则是“发行版”。
54+
>
55+
> 例如我们使用的校园助手 App,在历经界面优化、接口修复等多次修改形成一个稳定、完整的版本后,才会打上标签(tag)发行。
5156
5257
## Git
5358

@@ -63,8 +68,9 @@ Git 是一种分布式版本控制软件。
6368

6469
> [!tip]
6570
>
66-
> - 本学期的大部分实验都在 Linux 系统上完成,使用 Windows 系统的同学请在虚拟机安装 Git,使用服务器的同学请在服务器上安装 Git。
67-
> - 检查安装是否成功。在虚拟机 / 服务器上输入 `git --version`,如果输出 `git version <版本号>`,则为安装成功。
71+
> 本学期的大部分实验都在 Linux 系统上完成,使用 Windows 系统的同学请在 WSL 或虚拟机安装 Git,使用服务器的同学请在服务器上安装 Git。
72+
>
73+
> 检查安装是否成功。在虚拟机 / 服务器上输入 `git --version`,如果输出 `git version <版本号>`,则为安装成功。
6874
6975
### 配置
7076

@@ -205,7 +211,7 @@ VS Code 原生集成了 Git,同时提供了一系列插件,例如 Git 提交
205211
On branch main
206212
Changes to be committed:
207213
(use "git restore --staged <file>..." to unstage)
208-
new file: tracked-file
214+
new file: added-file
209215
210216
Untracked files:
211217
(use "git add <file>..." to include in what will be committed)
@@ -256,35 +262,44 @@ VS Code 原生集成了 Git,同时提供了一系列插件,例如 Git 提交
256262

257263
合并有两种常见的结果:
258264

259-
1. Fast-forward 合并。如果 main 没有新的提交,只落后于 feature,执行 `git merge feature``main` 分支会直接“快进”到 `D`
260-
265+
1. Fast-forward 合并。如果 main 没有新的提交,只落后于 feature:
266+
261267
```bash
262268
main: A---B
263-
feature: A---B---C---D
269+
\
270+
feature: C---D
271+
```
272+
273+
执行 `git merge feature``main` 分支会直接“快进”到 `D`
274+
275+
```bash
276+
main: A---B---C---D
277+
\
278+
feature: C---D
264279
```
265280

266281
2. 非 fast-forward 合并。如果两个分支各有提交:
267282

268283
```bash
269-
main: A---B
270-
\
271-
feature: C---D
284+
main: A---B---E
285+
\
286+
feature: C---D
272287
```
273288

274-
执行 `git merge feature` 后 Git 会创建一个新的合并提交(merge commit)`E`
289+
执行 `git merge feature` 后 Git 会创建一个新的合并提交(merge commit)`F`
275290

276291
```bash
277-
main: A---B-------E
278-
\ /
279-
feature: C---D
292+
main: A---B---E---F
293+
\ /
294+
feature: C---D
280295
```
281296

282297
:::tip
283298

284299
当两个分支修改了同一文件的同一位置,就会出现冲突(conflict),Git 无法自动合并。
285300

286301
```bash
287-
user@linux:~/test-git# git merge feature
302+
user@linux:~/test-git$ git merge feature
288303
Auto-merging main.cpp
289304
CONFLICT (content): Merge conflict in main.cpp
290305
Automatic merge failed; fix conflicts and then commit the result.
@@ -295,7 +310,7 @@ VS Code 原生集成了 Git,同时提供了一系列插件,例如 Git 提交
295310

296311
## GitHub
297312

298-
GitHub 是一个 **基于 Git 的代码托管平台**,你可以将你的本地 Git 仓库上传为远程仓库,这样别人就可以拉取你的代码,与你进行协作。
313+
GitHub 是一个基于 Git 的代码托管平台,你可以将你的本地 Git 仓库上传为远程仓库,这样别人就可以拉取你的代码,与你进行协作。
299314

300315
### 配置
301316

@@ -323,18 +338,18 @@ GitHub 是一个 **基于 Git 的代码托管平台**,你可以将你的本地
323338
>
324339
> SSH key 的生成参考[这个文档](/appendix/ssh-server/#_2-生成-ssh-密钥对)
325340
>
326-
> 如果你在服务器上实验,需要在服务器上生成密钥对;如果在自己电脑的虚拟机上实验,需要在 wsl 中生成;如果你以后希望在本机拉取/上传 GitHub 仓库,则需要在本机生成密钥对。
341+
> 如果你在服务器上实验,需要在服务器上生成密钥对;如果在自己电脑的虚拟机上实验,需要在 WSL 中生成;如果你以后希望在本机拉取/上传 GitHub 仓库,则需要在本机生成密钥对。
327342

328343
6. 验证配置是否成功
329344

330345
```bash
331-
user@linux:~# ssh -T git@github.com
346+
user@linux:~$ ssh -T git@github.com
332347
Hi <用户名>! You've successfully authenticated, but GitHub does not provide shell access.
333348
```
334349
335-
如果没有得到期望的输出,请检查密钥对配置,或参考[这个文档](/appendix/misc-qa)
350+
如果没有得到期望的输出,请检查密钥对配置,或参考[这个文档](/appendix/misc-qa),如果仍有问题,请联系助教。
336351
337-
### GitHub 基本操作
352+
### Git Remote 基本操作
338353
339354
- `git clone`
340355
@@ -346,18 +361,18 @@ Hi <用户名>! You've successfully authenticated, but GitHub does not provide s
346361
347362
- `git pull`
348363
349-
拉取最新的代码。这个操作相当于 `git fetch(将远程分支拉到本地)` + `git merge(将远程分支合并入本地分支)`
364+
拉取最新的代码。这个操作相当于 `git fetch`(将远程分支拉到本地) + `git merge`(将远程分支合并入本地分支)
350365
351366
- `git push`
352367
353368
将本地仓库的修改推送到远程仓库。
354369
355370
:::details 示例
356-
如果你想修正我们课程网页上的错误,可以在 GitHub 点进我们的仓库,点击 `Code`,再选择 `SSH`,复制这串 URL。
371+
如果你想修正我们课程网页上的错误,可以在 GitHub fork 我们的仓库到你自己的仓库,然后点击 `Code`,再选择 `SSH`,复制这串 URL。
357372
358373
![1](github1.png)
359374
360-
在终端运行 `git clone git@github.com:ICS-25Fall-FDU/ICS-25Fall-FDU.github.io.git`
375+
在终端运行 `git clone git@github.com:ICS-25Fall-FDU/ICS-25Fall-FDU.github.io.git`(你需要替换成你自己仓库的地址)
361376
362377
```bash
363378
user@linux:~# git clone git@github.com:ICS-25Fall-FDU/ICS-25Fall-FDU.github.io.git
@@ -373,7 +388,7 @@ Resolving deltas: 100% (143/143), done.
373388
下一个 lab 发布时,我们的网页仓库会有更新,需要运行 `git pull`
374389
375390
```bash
376-
linux@user:~/ICS-25Fall-FDU.github.io# git pull
391+
user@linux:~/ICS-25Fall-FDU.github.io# git pull
377392
Updating 67568b7..10fcbcf
378393
Fast-forward
379394
.gitignore | 3 +-
@@ -383,7 +398,7 @@ Fast-forward
383398
create mode 100644 docs/appendix/misc-qa.md
384399
```
385400
386-
如果你在本地仓库新增了 commit,你就可以 `git push`。当然,对于这个仓库你并没有 push 权限。你需要先 fork 该仓库,将本地修改 push 到你自己的仓库,然后向我们的仓库发起 pull request
401+
如果你在自己的本地仓库提交了 commit,你就可以执行 `git push`,然后在 GitHub 上向我们的仓库发起 Pull Request,此部分可能会给你的实验附加分
387402
:::
388403
389404
## 加入 GitHub Classroom
@@ -416,9 +431,9 @@ Fast-forward
416431
417432
## 实验任务
418433
419-
1. 认真阅读文档,学习 Git 的基本用法
434+
1. 认真阅读文档,学习 Git 的基本用法,并在报告中回答文档中的问题。(15 分)
420435
2. 加入 GitHub Classroom。
421-
3. 克隆你的个人远程仓库,完成 `main.c` 文件中的 `TODO` 部分并进行一次 commit。(50分
436+
3. 克隆你的个人远程仓库,完成 `main.c` 文件中的 `TODO` 部分并进行一次 commit。(50 分
422437
> [!info]
423438
>
424439
> 只要填入任意字符串就算完成,当然你也可以随意发挥(程序的正确性不纳入计分,有修改即可)。
@@ -431,19 +446,25 @@ Fast-forward
431446
> make clean
432447
> ```
433448
434-
4. 学习 Git 分支管理,新建 `feature` 分支,在该分支以及 `main` 分支上对 `main.c` 分别进行一次修改与提交(10分)。
449+
4. 在下面的三个网页中任选其二进行阅读,简要概括其内容,并谈谈你对“为什么要学习 Git”这个问题的理解。(15 分)
450+
451+
- [Commit Message 规范](https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)
452+
- [Git Flow 分支控制](https://www.dafaycoding.com/article/git-gif-flow)
453+
- [语义化版本](https://semver.org/lang/zh-CN/)
435454
436-
随后将 `feature` 分支 merge 到 `main` 分支(即切换回 main 分支执行 `git merge feature`)。
455+
5. 学习 Git 分支管理,新建 `feature` 分支,在该分支以及 `main` 分支上对 `main.c` 分别进行一次修改与提交(10 分)。
456+
457+
随后将 `feature` 分支 merge 到 `main` 分支(即切换回 main 分支执行 `git merge feature`),并处理发生的合并冲突(10 分)。
437458
438459
> [!important]
439460
>
440-
> 在两个分支上的提交需要满足:在 `main` 分支合并时会出现冲突。请你解决这个冲突,并在实验报告里截图表明你遇到并解决了冲突。(20分)
441-
> > [!tip]
442-
> > 请阅读 `git merge` 部分,思考如何修改 `main.c` 会出现冲突。
443-
> >
444-
> > 如果你两次提交之后合并没有出现冲突,不必担心,你可以重复提交与合并而不用撤回之前的提交,直到出现冲突并解决。
461+
> 在两个分支上的提交必须要满足:在 `main` 分支合并时会出现冲突。请你解决这个冲突,并在实验报告里截图表明你遇到并解决了冲突。
462+
>
463+
> 请阅读 `git merge` 部分,思考如何修改 `main.c` 会出现冲突。
464+
>
465+
> 如果你两次提交之后合并没有出现冲突,不必担心,你可以不用撤回之前的提交,而是继续尝试提交修改并 merge,直到出现冲突并解决。
445466
446-
5. 在 `main` 分支提交一份实验报告(10分),格式要求为 `PDF``Markdown`。内容包括
467+
6. 在 `main` 分支提交一份实验报告(实验报告单独评分),格式要求为 `PDF` 或 `Markdown`。内容包括
447468
- 你的实验步骤
448469
- 必要的截图
449470
- 你的建议(可选)
@@ -459,22 +480,27 @@ Fast-forward
459480
460481
## 提交
461482
462-
**提交方式**:在本地仓库完成上述所有提交后,在 main 分支执行 `git push`(当然你也可以每提交一次就 push)
483+
提交方式:在本地仓库完成上述所有实验后,将资料和报告都上传到 main 分支,并提交到 GitHub
463484
464-
**截止时间**:10 月 8 日 23:59。逾期将扣除部分分数。
485+
截止时间:10 月 8 日 23:59。逾期将扣除部分分数。
465486
466487
> [!info] 写在最后的话
467488
>
468489
> 作为第一次作业,这个文档的字数过多,但实际的任务很少。如果你对 Git 感兴趣可以认真读完,甚至在网上寻找其他学习资源。
469490
>
470-
> 如果你觉得内容过于冗长,只需对照实验任务针对性地学习重点。完成后续实验最简单的流程就是 `git clone` -> 写完所有代码 -> `git add -A && git commit -m "xxx" && git push`
491+
> 如果你觉得内容过于冗长,只需对照实验任务针对性地学习重点。完成后续其它 Lab 最简单的流程就是 `git clone` -> 写完所有代码 -> `git add -A && git commit -m "xxx" && git push`。
471492
472493
## 学习资源
473494
474-
- [Pro Git](https://git-scm.com/book/en/v2) / [Pro Git中文版](https://git-scm.com/book/zh/v2),推荐阅读1-3章
475-
- [学习git的在线游戏](https://learngitbranching.js.org/),挺好玩的
495+
- [Pro Git](https://git-scm.com/book/en/v2) / [Pro Git 中文版](https://git-scm.com/book/zh/v2),推荐阅读1-3章
496+
- [学习 Git 的在线游戏](https://learngitbranching.js.org/),挺好玩的
476497
- [ohshitgit](https://ohshitgit.com/),简短的介绍了如何从 Git 错误中恢复
477498
- [Git for Computer Scientists](https://eagain.net/articles/git-for-computer-scientists/),简短的介绍了 Git 的数据模型
478499
- [git-from-the-bottom-up](https://jwiegley.github.io/git-from-the-bottom-up/),详细的介绍了 Git 的实现细节
479500
- [explain-git-in-simple-words](https://xosh.org/explain-git-in-simple-words/),如其名
480-
- [用动图展示10大Git命令](https://zhuanlan.zhihu.com/p/132573100),一篇精美文章
501+
- [用动图展示 10 大 Git 命令](https://zhuanlan.zhihu.com/p/132573100),一篇精美文章
502+
503+
> [!info] 本 Lab 负责助教
504+
>
505+
> - [徐厚泽](mailto:houzexu22@m.fudan.edu.cn)
506+
> - [朱程炀](mailto:i@zecyel.xyz)

0 commit comments

Comments
 (0)