490 lines
5.7 KiB
Markdown
490 lines
5.7 KiB
Markdown
# Day_3:Git 入门——给代码一个“存档点”
|
||
|
||
> 今天学习 APP 开发中非常重要的工具:Git。
|
||
>
|
||
> 不管以后学习 React Native、Kotlin、KMP 还是后端,你都会继续使用它。
|
||
|
||
预计用时:40~60 分钟
|
||
|
||
## 今日目标
|
||
|
||
完成今天后,你应该能够:
|
||
|
||
- 理解 Git 大概是做什么的
|
||
- clone 一个仓库
|
||
- 查看 Git 状态
|
||
- add 修改
|
||
- commit 修改
|
||
- push 到远程
|
||
- pull 最新代码
|
||
|
||
暂时不用学习复杂 Git。
|
||
|
||
---
|
||
|
||
# 1. Git 是什么?
|
||
|
||
假设你写项目时这样保存:
|
||
|
||
```text
|
||
最终版.zip
|
||
最终版2.zip
|
||
最终版真的最终版.zip
|
||
最终版真的最终版修改.zip
|
||
```
|
||
|
||
这显然很痛苦。
|
||
|
||
而 Git 可以帮你简洁优雅地保存项目的修改历史。
|
||
|
||
---
|
||
|
||
# 2. Git 最基本的流程
|
||
|
||
暂时只需要记住:
|
||
|
||
```text
|
||
修改文件
|
||
↓
|
||
git add
|
||
↓
|
||
git commit
|
||
↓
|
||
git push
|
||
↓
|
||
远程仓库
|
||
```
|
||
|
||
其中:
|
||
|
||
```text
|
||
add
|
||
```
|
||
|
||
表示:
|
||
|
||
> 我准备提交这些修改。
|
||
|
||
```text
|
||
commit
|
||
```
|
||
|
||
表示:
|
||
|
||
> 保存一个版本。
|
||
|
||
```text
|
||
push
|
||
```
|
||
|
||
表示:
|
||
|
||
> 把本地版本上传到服务器。
|
||
|
||
---
|
||
|
||
# 3. 配置自己的身份
|
||
|
||
第一次使用 Git,需要告诉 Git 你是谁。
|
||
|
||
打开终端:
|
||
|
||
```bash
|
||
git config --global user.name "你的名字"
|
||
```
|
||
|
||
例如:
|
||
|
||
```bash
|
||
git config --global user.name "Arthur"
|
||
```
|
||
|
||
再填写邮箱:
|
||
|
||
```bash
|
||
git config --global user.email "你的邮箱"
|
||
```
|
||
|
||
查看:
|
||
|
||
```bash
|
||
git config --global --list
|
||
```
|
||
|
||
---
|
||
|
||
# 4. 创建自己的练习仓库
|
||
|
||
进入 GitHub。
|
||
|
||
创建一个自己的仓库,例如:
|
||
|
||
```text
|
||
app-rookie-你的名字
|
||
```
|
||
|
||
创建仓库时建议:
|
||
|
||
```text
|
||
初始化 README
|
||
```
|
||
|
||
这样仓库不是空的。
|
||
|
||
找到仓库的:
|
||
|
||
```text
|
||
HTTPS Clone 地址
|
||
```
|
||
|
||
复制。
|
||
|
||
今天创建的仓库先用来练习 Git。明天会把 Day_1 的 `CampusHelper` 应用文件复制到这个仓库中,这样 Git 历史和应用代码就在同一个地方;Day_1 的原目录会暂时保留,不需要删除。
|
||
|
||
---
|
||
|
||
# 5. clone 到自己的电脑
|
||
|
||
先进入你准备保存代码的位置:
|
||
|
||
```bash
|
||
cd 你的目录
|
||
```
|
||
|
||
然后:
|
||
|
||
```bash
|
||
git clone 复制下来的地址
|
||
```
|
||
|
||
例如:
|
||
|
||
```bash
|
||
git clone <你的仓库地址>
|
||
```
|
||
|
||
成功后:
|
||
|
||
```bash
|
||
ls
|
||
```
|
||
|
||
应该出现:
|
||
|
||
```text
|
||
app-rookie-你的名字
|
||
```
|
||
|
||
进入:
|
||
|
||
```bash
|
||
cd app-rookie-你的名字
|
||
```
|
||
|
||
---
|
||
|
||
# 6. 看看 Git 在干什么
|
||
|
||
执行:
|
||
|
||
```bash
|
||
git status
|
||
```
|
||
|
||
如果没有修改,通常会看到类似:
|
||
|
||
```text
|
||
nothing to commit
|
||
working tree clean
|
||
```
|
||
|
||
意思是:
|
||
|
||
> 当前代码没有没有保存的修改。
|
||
|
||
---
|
||
|
||
# 7. 修改一个文件
|
||
|
||
执行:
|
||
|
||
```bash
|
||
echo "Day 3 Git Practice" > Day_3.txt
|
||
```
|
||
|
||
再:
|
||
|
||
```bash
|
||
git status
|
||
```
|
||
|
||
这一次你应该看到:
|
||
|
||
```text
|
||
Day_3.txt
|
||
```
|
||
|
||
出现在未跟踪文件中。
|
||
|
||
---
|
||
|
||
# 8. git add
|
||
|
||
执行:
|
||
|
||
```bash
|
||
git add Day_3.txt
|
||
```
|
||
|
||
再次:
|
||
|
||
```bash
|
||
git status
|
||
```
|
||
|
||
文件状态发生了变化。
|
||
|
||
现在表示:
|
||
|
||
> 我准备把 Day_3.txt 放进下一次 commit。
|
||
|
||
---
|
||
|
||
# 9. 第一个 commit
|
||
|
||
执行:
|
||
|
||
```bash
|
||
git commit -m "docs: finish day 3 git practice"
|
||
```
|
||
|
||
这里:
|
||
|
||
```text
|
||
-m
|
||
```
|
||
|
||
后面的文字就是:
|
||
|
||
> 这次修改做了什么。
|
||
|
||
---
|
||
|
||
# 10. push
|
||
|
||
执行:
|
||
|
||
```bash
|
||
git push
|
||
```
|
||
|
||
根据平台设置,第一次可能需要登录。
|
||
|
||
完成后打开网页刷新仓库。
|
||
|
||
如果你看到:
|
||
|
||
```text
|
||
Day_3.txt
|
||
```
|
||
|
||
恭喜:
|
||
|
||
> 🎉 你完成了第一次真正的 Git 提交。
|
||
|
||
---
|
||
|
||
# 11. git log
|
||
|
||
执行:
|
||
|
||
```bash
|
||
git log --oneline
|
||
```
|
||
|
||
你可能看到:
|
||
|
||
```text
|
||
abc1234 docs: finish day 3 git practice
|
||
...
|
||
```
|
||
|
||
这就是你的提交历史。
|
||
|
||
---
|
||
|
||
# 12. pull 是什么?
|
||
|
||
如果服务器上的代码比你的电脑更新:
|
||
|
||
需要:
|
||
|
||
```bash
|
||
git pull
|
||
```
|
||
|
||
你可以尝试:
|
||
|
||
1. 在 Git 网页上修改 `README.md`
|
||
2. 直接在网页提交修改
|
||
3. 回到本地
|
||
4. 执行:
|
||
|
||
```bash
|
||
git pull
|
||
```
|
||
|
||
观察本地文件的变化。
|
||
|
||
---
|
||
|
||
# 今日任务
|
||
|
||
完成以下过程:
|
||
|
||
```text
|
||
创建个人仓库
|
||
↓
|
||
clone
|
||
↓
|
||
创建 Day_3.txt
|
||
↓
|
||
git add
|
||
↓
|
||
git commit
|
||
↓
|
||
git push
|
||
↓
|
||
网页确认文件存在
|
||
```
|
||
|
||
然后再做第二次修改:
|
||
|
||
把:
|
||
|
||
```text
|
||
Day 3 Git Practice
|
||
```
|
||
|
||
改成:
|
||
|
||
```text
|
||
Day 3 Git Practice
|
||
I know how to use Git now.
|
||
```
|
||
|
||
再次:
|
||
|
||
```bash
|
||
git add .
|
||
git commit -m "docs: update day 3 practice"
|
||
git push
|
||
```
|
||
|
||
最后:
|
||
|
||
```bash
|
||
git log --oneline
|
||
```
|
||
|
||
应该至少看到两个自己的 commit。
|
||
|
||
---
|
||
|
||
# 验收标准
|
||
|
||
- [ ] 知道 Git 是版本管理工具
|
||
- [ ] 成功 clone 仓库
|
||
- [ ] 会执行 `git status`
|
||
- [ ] 会执行 `git add`
|
||
- [ ] 会执行 `git commit`
|
||
- [ ] 会执行 `git push`
|
||
- [ ] 知道 `git pull` 是做什么的
|
||
- [ ] 仓库里至少存在两个自己的 commit
|
||
|
||
提交:
|
||
|
||
```text
|
||
git log --oneline
|
||
```
|
||
|
||
的截图。
|
||
|
||
---
|
||
|
||
# 常见问题
|
||
|
||
## `not a git repository`
|
||
|
||
先执行:
|
||
|
||
```bash
|
||
pwd
|
||
```
|
||
|
||
很可能:
|
||
|
||
> 你没有进入仓库目录。
|
||
|
||
执行:
|
||
|
||
```bash
|
||
cd app-rookie-你的名字
|
||
```
|
||
|
||
然后再试。
|
||
|
||
这就是为什么 Day_2 要学习目录。
|
||
|
||
---
|
||
|
||
## `nothing to commit`
|
||
|
||
通常表示:
|
||
|
||
> 你没有新的修改可以提交。
|
||
|
||
先:
|
||
|
||
```bash
|
||
git status
|
||
```
|
||
|
||
看看发生了什么。
|
||
|
||
---
|
||
|
||
## push 被拒绝
|
||
|
||
先不要乱执行:
|
||
|
||
```text
|
||
--force
|
||
```
|
||
|
||
先尝试:
|
||
|
||
```bash
|
||
git pull
|
||
```
|
||
|
||
如果仍然失败:
|
||
|
||
把完整报错提交到工单或询问学长学姐。
|
||
|
||
---
|
||
|
||
# Bonus
|
||
|
||
尝试执行:
|
||
|
||
```bash
|
||
git diff
|
||
```
|
||
|
||
然后修改一个文件,再执行一次。
|
||
|
||
看看 Git 是如何显示代码变化的。
|
||
|
||
---
|