Skip to content

Commit

Permalink
subsec1,2,3
Browse files Browse the repository at this point in the history
  • Loading branch information
Dayuxiaoshui committed Feb 13, 2025
1 parent ab9c7cd commit 5de5077
Show file tree
Hide file tree
Showing 5 changed files with 262 additions and 2 deletions.
2 changes: 1 addition & 1 deletion docs/ch3/sec1/subsec1/3-practice-code-hosting-platforms.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 实践:注册并熟悉代码托管平台 (易炜涵)
# 实践:注册并熟悉代码托管平台

> 学生注册代码托管平台账户并熟悉其功能。注册 GitHub、Gitee 等平台的账号。了解平台的主要功能界面,并做出一些常识。
Expand Down
2 changes: 1 addition & 1 deletion docs/ch3/sec1/subsec1/4-create-repo.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 创建并管理仓库 (Repository) (易炜涵)
# 创建并管理仓库 (Repository)

> 本实验旨在帮助学生掌握如何创建并管理云端代码仓库,并建立本地与云端仓库的同步连接。我们将通过两种不同的途径实现这一目标:一种是从 GitHub 网站开始操作,另一种是从本地计算机开始操作。
Expand Down
88 changes: 88 additions & 0 deletions docs/ch3/sec1/subsec3/1-rebase-merge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
## Git Rebase vs. Git Merge:选哪个?🤔

**目的:** 搞懂 Git 这两种合并分支的酷炫方式,以后合并代码不再纠结!

**内容:**

咱们先不讲那些复杂的理论,直接上例子,保证你一看就明白!

### 场景模拟:团队合作开发新功能 🚀

假设你和小伙伴们正在一起开发一个超酷炫的新功能,每个人负责一部分:

* **你:** 负责开发用户登录界面 (在 `feature/login` 分支)
* **小伙伴A:** 负责开发商品展示页面 (在 `feature/product` 分支)
* **主分支:** `main` 分支,是大家共同的基础

#### Git Merge:简单粗暴,历史全记录 📖

1. **你完成了登录界面的开发,想要把代码合并到 `main` 分支:**

```bash
git checkout main # 切换到 main 分支
git merge feature/login # 把 feature/login 分支合并到 main 分支
```

* **结果:** Git 会创建一个新的合并提交(merge commit),把你的 `feature/login` 分支和 `main` 分支的最新代码合并在一起。

* **特点:** 简单!`main` 分支的历史记录会完整保留所有分支的开发过程,就像一本详细的日记。

2. **小伙伴A也完成了商品展示页面的开发,同样合并到 `main` 分支:**

```bash
git checkout main
git merge feature/product
```

* **结果:** 又多了一个合并提交!

* **潜在问题:** 如果很多人都在不同的分支上开发,`main` 分支的历史记录可能会变得很乱,像蜘蛛网一样 🕸️。

#### Git Rebase:乾坤大挪移,历史更清晰 ✨

1. **你完成了登录界面的开发,这次咱们用 `rebase`**

```bash
git checkout feature/login # 切换到 feature/login 分支
git rebase main # 把 main 分支的最新代码“垫”到你的 feature/login 分支下面
git checkout main
git merge feature/login # 快速向前合并
```

* **结果:**
* `rebase` 会把你的 `feature/login` 分支上的提交“移动”到 `main` 分支的最新提交之后。就像是把你的分支“嫁接”到了 `main` 分支上。
* 然后再次在`main`进行`merge`时,由于`feature/login`是直接从`main`分支“生长”出来的,所以可以直接快速合并(fast-forward),不会产生额外的合并提交。

* **特点:** 干净!`main` 分支的历史记录会是一条直线,非常清晰。

2. **小伙伴A也用 `rebase` 合并:**

```bash
git checkout feature/product
git rebase main
git checkout main
git merge feature/product #快速向前合并
```

* **结果:** 同样,`main` 分支的历史记录依然保持一条直线。

* **潜在问题:** `rebase` 会改写提交历史,如果你已经把 `feature/login` 分支推送到远程仓库,并且其他人在这个分支上工作,就不要用 `rebase` 了,否则会造成混乱。

### 总结:选哪个?

| 特性 | Git Merge | Git Rebase |
| :----------- | :---------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ |
| 历史记录 | 完整,包含所有分支的开发过程 | 简洁,一条直线 |
| 操作难度 | 简单 | 稍复杂,需要理解“变基”的概念 |
| 适用场景 | 适合小型团队,或者希望保留完整开发历史的情况 | 适合个人开发,或者希望保持主分支历史清晰的情况 |
| **注意事项** | **如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 `rebase`** | **如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 `rebase`** |
| **比喻** | **像一本详细的日记,记录了所有发生的事情** | **像一棵树,主干清晰,分支从主干生长出来** |
| **口诀** | **`merge`虽乱心不乱,`rebase`虽直易出错** | **`merge`虽乱心不乱,`rebase`虽直易出错** |

### 趣味小练习 🎮

1. 自己创建几个分支,分别用 `git merge``git rebase` 进行合并,看看有什么不同。
2. 试着画出两种合并方式的提交历史图,加深理解。
3. 思考一下,在你的团队项目中,哪种合并方式更适合?

希望这个文档能帮助你更好地理解 Git Rebase 和 Git Merge!记住,实践出真知,多动手试试,你会发现 Git 其实很有趣!😉
89 changes: 89 additions & 0 deletions docs/ch3/sec1/subsec3/2-Control Process .md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
## Git 分布式版本控制:代码世界的“多人运动”! 🏃‍♀️🏃‍♂️

**目的:** 啥是 Git 的“分布式”?别怕,咱们一起玩着就明白了!

**内容:**

想象一下,你们团队要一起盖一座乐高城堡 🏰,每个人负责不同的部分:

* **你:** 负责城堡的大门 (在 `feature/gate` 分支)
* **小伙伴A:** 负责城堡的塔楼 (在 `feature/tower` 分支)
* **小伙伴B:** 负责城堡的围墙 (在 `feature/wall` 分支)
* **GitHub/GitLab/Gitee:** 就像一个乐高积木的仓库,大家可以把自己的乐高零件(代码)放到这里,也可以从这里拿别人分享的零件。

#### Git 分布式:每个人都有自己的乐高盒子! 📦

* **集中式版本控制 (比如 SVN):** 只有一个中央乐高盒子,每次你想拼乐高,都得从中央盒子拿,拼完了再放回去。如果盒子管理员不在,或者盒子丢了,就完蛋了!
* **Git 分布式版本控制:** 每个人都有一个完整的乐高盒子!你可以在自己的盒子里随便拼,拼好了再和别人的盒子同步。即使中央盒子丢了,也没关系,每个人的盒子里都有完整的备份!

#### 玩转 Git 分布式,就像拼乐高!

1. **克隆 (clone):** 从 GitHub/GitLab/Gitee 上把整个乐高城堡的设计图纸复制一份到你的电脑上。

```bash
git clone <远程仓库地址>
```

2. **分支 (branch):** 每个人都从主设计图纸(`main` 分支)上复制一份,开始搭建自己的部分。

```bash
git checkout -b feature/gate # 你创建并切换到 feature/gate 分支,开始搭建城堡大门
```

3. **提交 (commit):** 你拼好了一个乐高积木,觉得很满意,就把它“咔哒”一声固定在你的城堡大门上。

```bash
# 拼好了一个乐高积木...
git add .
git commit -m "我拼好了一个超酷的城门吊桥!"
```

4. **推送 (push):** 你觉得你的城门吊桥太酷了,想分享给小伙伴们看看,就把你的 `feature/gate` 分支推送到 GitHub/GitLab/Gitee。

```bash
git push -u origin feature/gate
```

5. **拉取 (pull):** 小伙伴A 搭建好了城堡的塔楼,你想看看他的塔楼长啥样,就把他的 `feature/tower` 分支拉到你的本地。

```bash
git pull origin feature/tower
```

6. **合并 (merge):** 你觉得小伙伴A 的塔楼很棒,想把它拼到你的城堡上,就把 `feature/tower` 分支合并到你的 `feature/gate` 分支。

```bash
git merge feature/tower
```

7. **冲突解决 (resolve conflicts):** 糟糕!你和小伙伴A 都想在同一个地方放一个窗户,Git 不知道该听谁的了,就会提示冲突。你需要手动打开“冲突”的乐高积木,决定最终的设计,然后再次“咔哒”一声固定。

```bash
# 手动打开冲突的乐高积木,决定最终的设计...
git add .
git commit -m "我和小伙伴A一起决定了窗户的最终位置!"
```

8. **合并到主分支 (merge to main):** 你的城堡大门终于完工了!你把它合并到主设计图纸(`main` 分支)上,并推送到 GitHub/GitLab/Gitee。

```bash
git checkout main
git merge feature/gate
git push origin main
```

### 总结:Git 分布式,就是这么简单!

* 每个人都有自己的代码仓库,可以离线工作。
* 通过推送和拉取来同步代码。
* 用分支来隔离不同的开发任务。
* 合并分支来整合代码。
* 解决冲突来确保代码的一致性。

### 趣味小挑战 🏆

1. 和小伙伴们一起,用 Git 协作完成一个小项目(比如写一篇博客、画一幅画、写一首歌)。
2. 故意制造一些冲突,看看 Git 是如何提示的,然后一起解决冲突。
3. 把你的 Git 仓库分享到 GitHub/GitLab/Gitee 上,让更多人看到你的作品!

掌握了 Git 分布式版本控制,你就可以和全世界的开发者一起玩转代码啦!🌍🎉
83 changes: 83 additions & 0 deletions docs/ch3/sec1/subsec3/3-help-open.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
## Git:本地开发的超级助手!🦸

**目的:** 学会用 Git 来管理你的本地项目,就像玩游戏一样轻松切换不同的“存档”!

**内容:**

想象一下,你正在开发一个游戏角色 👾,你想尝试不同的技能组合:

* **方案A:** 火焰 🔥 + 冰冻 ❄️
* **方案B:** 闪电 ⚡ + 隐身 👻
* **方案C:** 剧毒 🧪 + 治疗 🌱

如果不用 Git,你可能需要创建三个不同的文件夹,分别保存不同的代码。但是有了 Git,一切都变得简单了!

#### Git 分支:就像游戏的“存档点”! 💾

Git 的分支就像是游戏的“存档点”,你可以在不同的存档点之间自由切换,尝试不同的方案,而不用担心搞乱你的代码。

#### 玩转 Git 本地分支,只需几步!

1. **创建分支 (branch):** 为你的每个技能组合创建一个分支。

```bash
git branch feature/fire-ice # 创建火焰+冰冻分支
git branch feature/thunder-stealth # 创建闪电+隐身分支
git branch feature/poison-heal # 创建剧毒+治疗分支
```

2. **查看分支 (branch):** 看看你都有哪些分支。

```bash
git branch
```
你会看到类似这样的输出:
* feature/fire-ice
feature/poison-heal
feature/thunder-stealth
* main

`*` 表示你当前所在的分支。

3. **切换分支 (checkout):** 在不同的技能组合之间切换。

```bash
git checkout feature/thunder-stealth # 切换到闪电+隐身分支
```

现在,你可以在 `feature/thunder-stealth` 分支上修改代码,实现闪电和隐身技能。这些修改不会影响其他分支的代码。

4. **提交 (commit):** 在当前分支上修改代码,并提交。

```bash
# 修改了一些代码...
git add .
git commit -m "实现了闪电技能的初步效果!"
```

5. **合并分支 (merge):** 如果你觉得某个技能组合很棒,想把它合并到主分支(`main` 分支),可以这样做:

```bash
git checkout main # 切换到 main 分支
git merge feature/thunder-stealth # 把 feature/thunder-stealth 分支合并到 main 分支
```

6. **删除分支 (branch -d):** 如果你觉得某个技能组合不怎么样,或者已经合并到 `main` 分支了,可以删除它:

```bash
git branch -d feature/fire-ice # 删除 feature/fire-ice 分支
```

### 总结:Git 本地分支,就是这么好用!

* 你可以创建多个分支,分别开发不同的功能或尝试不同的方案。
* 你可以随时切换分支,就像切换游戏的存档点一样。
* 你可以把满意的分支合并到主分支,也可以删除不需要的分支。

### 趣味小挑战 🕹️

1. 在你的一个项目中(比如你的作业、你的博客、你的小游戏),创建几个分支,分别尝试不同的修改。
2. 试着在不同的分支上修改同一个文件的同一部分,然后切换分支,看看会发生什么。
3. 画出你的项目的分支图,看看它像什么(一棵树?一张网?)。

有了 Git,你的本地开发就像开了挂一样!你可以大胆尝试各种想法,再也不用担心把代码搞乱了!🚀

0 comments on commit 5de5077

Please sign in to comment.