@@ -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
3283436. 验证配置是否成功
329344
330345` ` ` bash
331- user@linux:~ # ssh -T git@github.com
346+ user@linux:~ $ ssh -T git@github.com
332347Hi < 用户名> ! 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 
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
363378user@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
377392Updating 67568b7..10fcbcf
378393Fast-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 分)
4204352. 加入 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