第84课 - 版本控制:Git 基础与 Python 项目
学习目标
完成本课学习后,你将能够:
- 理解版本控制(Git)在软件开发中的核心作用。
- 掌握 Git 最基本的操作流程(初始化、添加、提交、查看状态)。
- 学会为 Python 项目配置
.gitignore文件,以忽略不必要的文件。 - 了解如何将本地 Git 仓库与远程仓库(如 GitHub)进行关联与同步。
核心概念
想象一下,你在写一篇很长的论文。如果每次修改都保存一个新版本(论文_v1, 论文_v2, 最终版_再改一版.doc),很快就会变得混乱不堪。版本控制系统(VCS) 就是专门解决这个问题的工具,它能像一台"时光机"一样,记录你代码的每一次变更。
Git 是目前世界上最流行的分布式版本控制系统。它的核心概念非常简单:
- 仓库(Repository):项目文件夹加上 Git 的"隐藏"管理文件夹(
.git)。这是 Git 的"大脑",记录了所有的历史记录。 - 工作区(Working Directory):你当前正在编辑的项目文件所在的目录。
- 暂存区(Staging Area):一个准备区域。你修改的文件不会自动记录,需要先"放"进这里,然后再"打包"保存。
- 提交(Commit):对暂存区的文件打一个快照,并附上一段描述信息(commit message)。这就像给你的论文存了一个带标签的档。
基本的工作流程是:在工作区修改文件 → 将文件放入暂存区 → 将暂存区的内容提交到仓库。
对于 Python 项目,我们通常不想把所有文件都纳入版本控制,例如:
- Python 运行时生成的
__pycache__/字节码缓存。 - 虚拟环境文件夹
venv/或.venv/(因为依赖已在requirements.txt中管理)。 - 集成开发环境(IDE)的配置文件,如
.idea/或.vscode/。 - 包含敏感信息(如密码)的配置文件。
我们需要一个 .gitignore 文件来告诉 Git:"嘿,这些文件和目录你不用管。"
代码示例
让我们通过一个完整的示例来学习 Git 基础操作。
步骤1:创建一个Python项目并初始化Git
# 创建项目目录并进入
mkdir my_python_project
cd my_python_project
# 初始化一个Git仓库(会在目录下创建隐藏的.git文件夹)
git init
步骤2:创建一个Python文件
创建一个名为 hello.py 的文件,内容如下:
# hello.py
def say_hello(name):
"""打印问候语"""
print(f"你好, {name}!")
if __name__ == "__main__":
say_hello("Git学习者")
步骤3:创建 .gitignore 文件
创建一个名为 .gitignore 的文件(没有扩展名),内容如下:
# Python缓存文件
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
# 虚拟环境
venv/
.venv/
env/
.env
# IDE配置
.vscode/
.idea/
*.swp
*.swo
# 操作系统生成的文件
.DS_Store
Thumbs.db
步骤4:执行基本的Git操作
# 查看当前仓库状态(会显示新增的文件:hello.py 和 .gitignore)
git status
# 将所有修改的文件(包括新文件)添加到暂存区
git add .
# 进行第一次提交,并附上描述信息
git commit -m "初始化项目:添加主程序和.gitignore文件"
步骤5:进行一次修改并再次提交
修改 hello.py:
# hello.py (更新版本)
def say_hello(name):
"""打印问候语,并返回问候字符串"""
greeting = f"你好, {name}!"
print(greeting)
return greeting # 新增:返回字符串
if __name__ == "__main__":
say_hello("Git学习者")
# 尝试调用函数并打印返回值
result = say_hello("Python")
print(f"函数返回了:{result}")
然后再次提交:
# 查看修改内容
git diff
# 添加修改到暂存区
git add hello.py
# 提交,描述这次改动
git commit -m "功能更新:say_hello函数现在返回问候字符串"
# 查看简洁的提交历史
git log --oneline
步骤6:(可选)关联远程GitHub仓库
- 在 GitHub.com 上创建一个新的空仓库(不要勾选初始化 README)。
- 将本地仓库关联到远程仓库:
# 关联远程仓库(替换URL为你自己的仓库地址)
git remote add origin https://github.com/你的用户名/my_python_project.git
# 将本地的main(或master)分支推送到远程仓库
git push -u origin main
实践练习
练习1:基础操作流水线
- 创建一个新的目录
calc_project。 - 在其中初始化一个 Git 仓库。
- 创建一个简单的
calculator.py文件,实现两个数相加的函数。 - 将它添加并提交到仓库,提交信息为"添加计算器加法功能"。
- 修改
calculator.py,增加一个相减的函数。 - 再次提交,提交信息为"添加减法功能"。
练习2:配置 .gitignore
- 在上一个练习的
calc_project中,创建一个test.txt文件(内容随意)。 - 创建一个
.gitignore文件,让 Git 忽略所有.txt文件。 - 执行
git status,验证test.txt是否被忽略。 - 提交
.gitignore文件,提交信息为"配置忽略规则"。
练习3:模拟协作(高级)
- 基于练习1的最终代码,使用
git checkout -b feature-multiply创建一个新分支。 - 在新分支上添加乘法功能并提交。
- 切换回
main分支。 - 尝试合并
feature-multiply分支到main。
常见错误
- 忘记创建
.gitignore:导致.pyc文件、虚拟环境或IDE配置被提交进仓库,污染代码历史。解决方案:项目初始化后,第一时间创建.gitignore文件。 - 提交信息过于随意:如
"update","fix bug","asdfgh"。这会让后续查看历史的人(包括未来的你)一头雾水。解决方案:使用明确的描述,如"fix: 修复用户登录时的空指针错误"或"feat: 添加数据导出为CSV功能"。 - 一次性提交过多、过大的改动:一个提交做了太多不相关的事情,难以回溯和复盘。解决方案:遵循"小步快跑"原则,一个逻辑功能修改完毕就提交一次。
- 在提交后才发现遗漏了文件:直接用
git add再添加文件并提交是可以的,但会多一个提交记录。解决方案:使用git commit --amend来修改上一次的提交(注意,如果已经推送到远程,不要轻易修改历史)。
小结
- Git 是"时光机":它通过提交记录你项目的每一次变更,允许你自由穿梭于各个版本之间,是团队协作和代码安全的基石。
- 核心三区与流程:理解 工作区 → 暂存区 → 仓库 的流程,掌握
git add和git commit的用法。 - Python 项目的护城河:善用
.gitignore文件,保持仓库的整洁,排除无关的运行时文件和本地配置。 - 远程协作:通过
git remote和git push/git pull可以与 GitHub 等平台同步代码,实现真正的协作开发。 - 好的习惯:写清晰的提交信息,进行小而频繁的提交,从项目开始就配置好
.gitignore。
掌握 Git 基础是成为一名合格开发者的必经之路。它不仅用于代码,还可以用于管理任何类型的文本文件变更(如文档、配置文件)。下一课,我们将学习如何将你的 Python 项目打包成 Docker 镜像,实现"一次构建,到处运行"!
练习编辑器
python
Loading...