Python编程:从入门到实践
章节

附录 D 使用 Git 进行版本控制

把代码变成可回退、可比较、可协作的历史

附录 D 将版本控制引入学习路径,让代码不再只是当前文件,而成为有历史、有分支的演化记录。

章节主张

Git 的根本价值,不是记命令,而是让代码修改拥有历史、安全垫和协作可能性。

中文释读

当项目还小时,版本控制看起来像额外负担;但一旦你写的代码开始反复改、想回退、想比较、想协作,它就会从‘可选工具’变成‘最低保障’。作者把 Git 放进附录,既不过早压垮初学者,也没有把它省略掉,这个节奏很合理。真正要学的,是版本控制思维。

本章知识路线

  1. 版本控制是给试错和协作加安全带
  2. 软件成长依赖安全迭代,而不是一次定型

关键论点

  • 版本控制为试错和回退提供安全结构。
  • Git 是现代软件协作的基础设施。
  • 早一点接触版本控制,会显著改善项目习惯。

行动清单

  • 至少理解提交、比较、回退和同步的基本流。
  • 把有意义的阶段性改动形成提交习惯。
  • 让版本控制为实验服务,而不是变成仪式。

源章节深读

附录 D 使⽤ Git 进⾏版本控制 版本控制软件让你能够为处于可⾏状态的项⽬创建快照。修改项⽬ (如实现新功能)后,如果项⽬不能正常运⾏,可恢复到上⼀个可⾏ 状态。 使⽤版本控制软件,你可以放⼿⼤胆地改进项⽬,不⽤担⼼项⽬因你犯错 ⽽遭到破坏。这不仅对于⼤型项⽬来说尤其重要,对于较⼩的项⽬(那怕 是只包含⼀个⽂件的程序)来说也⼤有裨益。 在本附录中,你将学习如何安装 Git ,以及如何使⽤它来对当前开发的程序 进⾏版本控制。 Git 是当前最流⾏的版本控制软件,它不仅包含很多⾼级⼯ 具,可帮助团队协作开发⼤型项⽬,⽽且其最基本的功能也⾮常适合独⽴ 的开发⼈员使⽤。 Git 通过跟踪对项⽬中每个⽂件的修改来实现版本控制。 如果你犯了错,只需恢复到保存的上⼀个状态即可。 D.1 安装 Git Git 可在所有操作系统上运⾏,但安装⽅法随操作系统⽽异。接下来的⼏⼩ 节详细说明了如何在各种操作系统中安装它。 有些系统默认安装了 Git ,通常是随你安装的其他包⼀起安装的。在尝试安 装 Git 前,看看系统是否已安装了它:打开⼀个终端窗⼝,并执⾏命令 git --version。

D.1 安装 Git

D.1 安装 Git Git 可在所有操作系统上运⾏,但安装⽅法随操作系统⽽异。接下来的⼏⼩ 节详细说明了如何在各种操作系统中安装它。 有些系统默认安装了 Git ,通常是随你安装的其他包⼀起安装的。在尝试安 装 Git 前,看看系统是否已安装了它:打开⼀个终端窗⼝,并执⾏命令 git --version。如果在输出中看到了具体的版本号,就说明系统安装了 Git 。如果看到⼀条消息,提⽰你安装或升级 Git ,只需按屏幕上的说明做即 可。

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.1 安装 Git 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.2 创建项目

D.2 创建项⽬ 我们来创建⼀个要进⾏版本控制的项⽬。在系统中创建⼀个⽂件夹,并将 其命名为 git_practice 。在这个⽂件夹中,创建⼀个简单的 Python 程序: hello_git.py print("Hello Git world!") 我们将使⽤这个程序来探索 Git 的基本功能。 D.3 忽略⽂件 扩展名为 .pyc 的⽂件是根据 .py ⽂件⾃动⽣成的,因此⽆须让 Git 跟踪它 们。这些⽂件存储在⽬录 __pycache__ 中。

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.2 创建项目 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.3 忽略文件

D.3 忽略⽂件 扩展名为 .pyc 的⽂件是根据 .py ⽂件⾃动⽣成的,因此⽆须让 Git 跟踪它 们。这些⽂件存储在⽬录 __pycache__ 中。为了让 Git 忽略这个⽬录,创建 ⼀个名为 .gitignore 的特殊⽂件(这个⽂件名以句点打头,且没有扩展 名),并在其中添加如下⼀⾏内容: .gitignore __pycache__/ 这会让 Git 忽略⽬录 __pycache__ 中的所有⽂件。

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.3 忽略文件 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.4 初始化仓库

D.4 初始化仓库 前⾯创建了⼀个⽬录,其中包含⼀个 Python ⽂件和⼀个 .gitignore ⽂件,现 在可以初始化⼀个 Git 仓库了。

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.4 初始化仓库 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.5 检查状态

D.5 检查状态 执⾏其他操作前,看⼀下项⽬的状态: git_practice$ git status ❶ On branch main No commits yet ❷ Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore hello_git.py ❸ nothing added to commit but untracked files pres

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.5 检查状态 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.6 将文件加入仓库

D.6 将⽂件加⼊仓库 下⾯将这两个⽂件加⼊仓库,并再次检查状态: ❶ git_practice$ git add . ❷ git_practice$ git status On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) ❸ new file: .gitignore new file: hello_git.py git_pra

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.6 将文件加入仓库 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.7 执行提交

D.7 执⾏提交 下⾯来执⾏第⼀次提交: ❶ git_practice$ git commit -m "Started project." ❷ [main (root-commit) cea13dd] Started project. ❸ 2 files changed, 5 insertions(+) create mode 100644 .gitignore create mode 100644 hello_git.py ❹ git_practice$ git statu

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.7 执行提交 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

D.8 查看提交历史

D.8 查看提交历史 Git 记录所有的项⽬提交。

这节解决什么:这一节主要解决《附录 D 使用 Git 进行版本控制》里一个更具体的子问题:D.8 查看提交历史 该怎样落到实际代码或项目动作上。

怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。

提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。

辨析题

为什么 Git 会被看作开发者的第二记忆系统?

本章图版学习路径

版本控制是给试错和协作加安全带

软件成长依赖安全迭代,而不是一次定型