4、Git基本操作:git init、git add、git commit、git status、git log的使用
说实话,很多刚接触版本控制的FPGA工程师,一上来就被各种命令吓住了。其实Git的核心操作就那么几个,翻来覆去用的就是今天要讲的这五条命令。我个人习惯把这五条命令称为「Git的起手式」,就像下围棋要先学会落子一样。
4.1 git init —— 一切从这里开始
你想想看,一个FPGA项目从零开始,第一步是什么?不是写代码,而是先建仓库。git init就是干这个的。
cd /home/projects/my_fpga_project
git init
执行完这条命令,你的项目文件夹里会多出一个隐藏的.git目录。嗯,这里要注意:这个目录就是Git的心脏,里面存着所有版本信息。删了它,版本历史就全没了。
.git目录要定期备份,或者推送到远程仓库。
我个人习惯在新建FPGA项目的第一时间就执行git init,哪怕文件夹里只有一个空的README文件。为什么?因为越早开始版本控制,后面越省心。
4.2 git status —— 你的项目体检报告
git status是我用得最频繁的命令,没有之一。它告诉你三件事:
- 哪些文件被修改了(但还没暂存)
- 哪些文件被暂存了(但还没提交)
- 哪些文件没有被Git跟踪
$ git status
On branch main
Changes not staged for commit:
modified: src/top.v
modified: constraints/timing.xdc
Untracked files:
src/testbench/
看到红色文件了吗?那是还没暂存的修改。绿色文件是已经暂存的。说白了,红色是「待处理」,绿色是「已就绪」。
4.3 git add —— 把文件请进暂存区
git add就是把你的修改「打包」起来,准备提交。你可以选择性地添加文件:
# 添加单个文件
git add src/top.v
# 添加整个目录
git add src/
# 添加所有变更(慎用!)
git add .
我在项目中遇到过一个问题:有个同事习惯用git add .,结果把编译生成的临时文件也加进去了。那些文件又大又没用,搞得仓库臃肿不堪。所以我的建议是:
- FPGA项目一定要配
.gitignore文件,把.o、.jou、.log、vivado*这些临时文件排除掉 - 提交前用
git status确认一下,别一股脑全加进去
4.4 git commit —— 给历史打个快照
git commit就是把暂存区的修改永久保存到仓库里。每次提交都会生成一个唯一的SHA-1哈希值,就像给历史打了个标签。
git commit -m "修复了FIFO读指针的跨时钟域同步问题"
关于提交信息,我有几条铁律:
- 用中文写 —— 团队协作时,中文比英文更容易理解
- 说清楚「为什么」 —— 别写「修改了top.v」,要写「优化了AXI接口的握手逻辑,解决了死锁问题」
- 控制在50字以内 —— 太长的信息在git log里显示不全
4.5 git log —— 翻阅项目的历史档案
git log就像一本日记,记录了你所有的提交历史。基本用法:
git log
commit a1b2c3d4e5f6...
Author: Zhang San <zhangsan@example.com>
Date: Mon Mar 10 14:30:00 2025 +0800
修复了FIFO读指针的跨时钟域同步问题
commit f6e5d4c3b2a1...
Author: Li Si <lisi@example.com>
Date: Sun Mar 9 10:15:00 2025 +0800
添加了UART模块的初始实现
我个人习惯用这些参数让输出更清晰:
| 命令 | 作用 | 我的使用场景 |
|---|---|---|
git log --oneline |
每行只显示一个提交 | 快速浏览历史,找某个提交 |
git log --graph |
显示分支合并图 | 查看分支结构,理清合并关系 |
git log -p |
显示每次提交的差异 | 审查代码变更,找bug引入点 |
git log --author="Zhang" |
只看某人的提交 | 团队协作时,查某个同事的工作 |
git log --oneline -5只看最近5次提交。配合git show <commit-id>查看具体改了哪些代码,排查问题非常高效。
4.6 实战:一个完整的FPGA项目提交流程
好了,理论说完了,咱们来走一遍实际流程。假设你正在开发一个SPI控制器:
# 1. 初始化仓库
cd spi_controller
git init
# 2. 创建.gitignore,排除Vivado生成的文件
echo "*.jou" >> .gitignore
echo "*.log" >> .gitignore
echo "*.str" >> .gitignore
echo "vivado*" >> .gitignore
# 3. 添加源文件
git add src/spi_master.v
git add src/spi_slave.v
git add constraints/spi_timing.xdc
# 4. 检查状态
git status
# 5. 提交
git commit -m "SPI控制器初始版本,支持4种时钟模式"
# 6. 查看历史
git log --oneline
这个流程看起来简单,但我在项目中见过太多人跳步骤。比如不写.gitignore就提交,结果仓库里塞满了Vivado的临时文件。或者不检查git status就直接commit,把没调试完的代码也提交上去了。
说白了,版本控制不是束缚你的枷锁,而是保护你的铠甲。刚开始用的时候可能会觉得麻烦,但等你习惯了,就会发现没有Git的日子简直没法干活。
公众号:蓝海资料掘金营,微信deep3321