嵌入式LINUX QT 开发 .gitignore 文件编写指南

Git .gitignore 文件编写指南

目录

  1. [什么是 .gitignore](#什么是 .gitignore)
  2. [Git 状态说明](#Git 状态说明)
  3. 当前项目未跟踪文件分析
  4. 文件分类判定依据
  5. [.gitignore 完整规则说明](#.gitignore 完整规则说明)

什么是 .gitignore

.gitignore 是 Git 的配置文件,用来告诉 Git 哪些文件不需要跟踪

为什么需要 .gitignore?

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        Git 仓库                                  │
│                                                                 │
│   ┌───────────────┐    ┌───────────────┐    ┌───────────────┐ │
│   │  源代码文件    │    │   编译产物     │    │   配置文件    │ │
│   │  (.cpp, .h)  │    │   (.o, .a)    │    │  (.pro.user) │ │
│   │               │    │               │    │               │ │
│   │  ✅ 需要跟踪   │    │  ❌ 不需要跟踪 │    │  ❌ 不需要跟踪 │ │
│   └───────────────┘    └───────────────┘    └───────────────┘ │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Git 状态说明

Git 文件状态类型

状态 符号 说明
未修改 (空) 文件没有变化
已修改 M 文件有修改但未暂存
未跟踪 ?? 新文件,Git 不知道要不要跟踪
已暂存 ( staged ) 准备好提交了

查看当前 Git 状态

bash 复制代码
git status --porcelain

输出示例

复制代码
 M .gitignore          # M = 已修改,未暂存
 M CSCU_A1_GIT/Bus.h   # M = 已修改,未暂存
?? CSCU_A1_GIT/MqttServer/   # ?? = 未跟踪,新文件

当前项目未跟踪文件分析

完整未跟踪文件列表

复制代码
?? CSCU_A1_GIT/FileReleaseFiles/nandflash/mqtt_config.ini
?? CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/lib/
?? CSCU_A1_GIT/MqttServer/
?? CSCU_A1_GIT/PahoMQTT/
?? CSCU_A1_GIT/TEUI_07/TEUI/src/MQTT/
?? CSCU_A1_GIT/mosquitto-2.0.10/
?? CSCU_A1_GIT/openssl-1.1.1w/
?? CSCU_A1_GIT/paho.mqtt.c-1.3.12/
?? toolchain.cmake

已修改但未暂存的文件

复制代码
 M .vscode/settings.json
 M CSCU_A1_GIT/Bus/Bus.h
 M CSCU_A1_GIT/Bus/Makefile.Bus
 M CSCU_A1_GIT/CSCU_A1_Manage.pro
 M CSCU_A1_GIT/CSCU_A1_Manage.pro.user
 M CSCU_A1_GIT/Card/Makefile.Card
 M CSCU_A1_GIT/ChargeEquipment/Makefile.ChargeEquipment
 M CSCU_A1_GIT/ChargeServiceV3/Makefile.ChargeServiceV3
 M CSCU_A1_GIT/Database/Makefile.DBOperate
 M CSCU_A1_GIT/DevCache/Makefile.DevCache
 M CSCU_A1_GIT/DeviceManage/Makefile.DeviceManage
 M CSCU_A1_GIT/EnergyConsumeServer/EnergyConsumeServer.cpp
 M CSCU_A1_GIT/EnergyConsumeServer/Makefile.EnergyConsumeServer
 M CSCU_A1_GIT/FileReleaseFiles/nandflash/bin/cscu_a1.init
 M CSCU_A1_GIT/FileReleaseFiles/nandflash/libconfig.ini
 M CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/mosquitto_pub
 M CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/mosquitto_sub
 M CSCU_A1_GIT/FileSystemFiles_Common/nandflash/libconfig.ini
 M CSCU_A1_GIT/GPIO_335X/Makefile.GPIO_335X
 M CSCU_A1_GIT/GeneralData/GeneralData.h
 M CSCU_A1_GIT/IEC104Server/Makefile.IEC104Server
 M CSCU_A1_GIT/LCDScreen/LCDDef.h
 M CSCU_A1_GIT/LCDScreen/Makefile.LCDScreen
 M CSCU_A1_GIT/Log/Makefile.Log
 M CSCU_A1_GIT/Makefile.CSCU_A1
 M CSCU_A1_GIT/ParamSet/Makefile.ParamSet
 M CSCU_A1_GIT/RealDataFilter/Makefile.RealDataFilter
 M CSCU_A1_GIT/TEUI_07/TEUI/Makefile.TEUI
 M CSCU_A1_GIT/TEUI_07/TEUI/TEUI
 M CSCU_A1_GIT/TEUI_07/TEUI/TEUI.pro
 M CSCU_A1_GIT/TEUI_07/TEUI/src/Charge/infomation4g.cpp
 M CSCU_A1_GIT/TEUI_07/TEUI/src/Charge/infomation4g.h
 M CSCU_A1_GIT/TEUI_07/TEUI/src/Common/InfoData.h
 M CSCU_A1_GIT/TEUI_07/TEUI/ui/Charge/infomation4g.ui
 M CSCU_A1_GIT/TempHumi/Makefile.TempHumi
 M CSCU_A1_GIT/Update/Makefile.Update
 M CSCU_A1_GIT/setup/Debug_setup_07.tar.gz
 M CSCU_A1_GIT/setup/Release_setup_07.tar.gz
 M CSCU_A1_GIT/setup/create_setup.sh
 M build-CSCU_A1_Manage-Arm_A8-Release/Makefile

文件分类判定依据

判断原则:是否需要在新电脑可用?

复制代码
问题:这个文件从仓库拉取后,另一台电脑能直接用吗?

┌─────────────────────────────────────────────────────────────────┐
│                         是                                        │
│    ↓                                                           │
│  这个文件是否编译/运行必需的?                                    │
│    ↓ 是                                                        │
│  【必须跟踪】                                                   │
│                                                                 │
│    ↓ 否                                                        │
│  【可以忽略】                                                   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

具体文件分析


1. toolchain.cmake
项目 内容
状态 ?? (未跟踪)
文件路径 /toolchain.cmake
文件内容 交叉编译工具链配置

判定依据

bash 复制代码
# 检查这个文件是否已经在Git仓库中
git ls-files --error-unmatch toolchain.cmake 2>/dev/null && echo "EXISTS" || echo "NEW"
# 输出: NEW(不在仓库中,是新文件)

分析

  • 绝对不能忽略:这是交叉编译的配置文件
  • 必须跟踪:没有这个文件,其他电脑无法编译项目

错误示例

复制代码
# ❌ 错误写法:toolchain.cmake 被忽略后,另一台电脑编译失败
toolchain.cmake

正确写法

复制代码
# ✅ 正确写法:不添加 toolchain.cmake 到忽略列表
# 这样它会保持未跟踪状态,可以用 git add toolchain.cmake 手动添加

2. openssl-1.1.1w/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/openssl-1.1.1w/
目录内容 OpenSSL 交叉编译产物

判定依据

bash 复制代码
git ls-files --error-unmatch CSCU_A1_GIT/openssl-1.1.1w/ 2>/dev/null && echo "EXISTS" || echo "NEW"
# 输出: NEW(新目录,不在仓库中)

分析

  • 绝对不能忽略整个目录
  • 必须跟踪openssl-1.1.1w/ 是新加入的交叉编译库
  • 如果忽略了,从仓库拉取后无法编译 MQTT 模块

目录内关键文件

复制代码
openssl-1.1.1w/
├── libcrypto.a    ← 必须跟踪(静态库)
├── libssl.a       ← 必须跟踪(静态库)
└── include/       ← 必须跟踪(头文件)

⚠️ 特别注意

复制代码
问:为什么不能用 *.a 忽略所有 .a 文件?

答:因为 openssl-1.1.1w/libcrypto.a 是编译好的静态库!
    如果用 *.a 忽略了,所有电脑都编译不了。

正确做法:
1. 不要用 *.a 忽略(太宽泛)
2. 改为精确指定要忽略的文件
3. 或者直接跟踪整个目录

3. PahoMQTT/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/PahoMQTT/
目录内容 Paho MQTT 交叉编译产物

判定依据

bash 复制代码
git ls-files --error-unmatch CSCU_A1_GIT/PahoMQTT/ 2>/dev/null && echo "EXISTS" || echo "NEW"
# 输出: NEW(新目录,不在仓库中)

分析

  • 绝对不能忽略整个目录
  • 必须跟踪PahoMQTT/ 是新加入的 MQTT 客户端库
  • 如果忽略了,从仓库拉取后无法编译 MQTT 模块

目录内关键文件

复制代码
PahoMQTT/
├── lib/
│   ├── libpaho-mqtt3cs.a  ← 必须跟踪(静态库,同步+SSL)
│   ├── libpaho-mqtt3as.a   ← 必须跟踪(异步+SSL)
│   ├── libpaho-mqtt3c.a    ← 必须跟踪(同步)
│   └── libpaho-mqtt3a.a    ← 必须跟踪(异步)
└── include/                ← 必须跟踪(头文件)

4. MqttServer/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/MqttServer/
目录内容 MQTT 模块核心代码

判定依据

bash 复制代码
git ls-files --error-unmatch CSCU_A1_GIT/MqttServer/ 2>/dev/null && echo "EXISTS" || echo "NEW"
# 输出: NEW(新目录,不在仓库中)

分析

  • 绝对不能忽略
  • 必须跟踪:这是 MQTT 功能的核心代码
  • 如果忽略了,从仓库拉取后没有 MQTT 功能

目录内关键文件

复制代码
MqttServer/
├── MqttServer.pro      ← 必须跟踪(Qt项目文件)
├── MqttServer.h        ← 必须跟踪(头文件)
├── MqttServer.cpp      ← 必须跟踪(核心代码)
├── MqttProtocol.h      ← 必须跟踪(协议处理)
└── MqttProtocol.cpp    ← 必须跟踪(协议实现)

5. mosquitto-2.0.10/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/mosquitto-2.0.10/
目录内容 mosquitto 源码目录

判定依据

  • 这是 mosquitto 的源码包解压后的目录
  • FileReleaseFiles 目录下已经有编译好的 mosquitto_pubmosquitto_sub

分析

  • ⚠️ 可以忽略:因为部署用的是 FileReleaseFiles 下的二进制文件
  • 但如果想要保留完整源码,可以跟踪

判断方法

bash 复制代码
# 查看是否已经有部署的二进制文件
ls -la CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/mosquitto_pub

6. paho.mqtt.c-1.3.12/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/paho.mqtt.c-1.3.12/
目录内容 Paho MQTT 源码目录

判定依据

  • 这是 Paho MQTT 的源码包解压后的目录
  • PahoMQTT/ 是编译好的库目录

分析

  • ⚠️ 可以忽略 :因为 PahoMQTT/ 已经有编译好的库
  • 如果要能重新编译 Paho,需要跟踪这个目录

判断方法

复制代码
PahoMQTT/lib/libpaho-mqtt3cs.a  ← 已有编译好的库
paho.mqtt.c-1.3.12/              ← 源码目录(可以不要)

6.5 openssl/openssl/ (编译产物目录)
项目 内容
状态 .gitignore 忽略
目录路径 CSCU_A1_GIT/openssl/openssl/
目录内容 交叉编译时自动生成的配置文件

判定依据

bash 复制代码
$ ls -la CSCU_A1_GIT/openssl/openssl/
总用量 16
drwxr-xr-x 2 dcuser dcuser  4096  4月 10 17:14 .
drwxr-xr-x 3 dcuser dcuser  4096  4月 10 17:14 ..
-rwxrwxr-x 1 dcuser dcuser  4622  4月 10 17:14 opensslconf.h

文件内容

c 复制代码
/*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/opensslconf.h.in
 */

这个目录是做什么的?

这是 OpenSSL 交叉编译时自动生成的编译产物目录 ,包含 opensslconf.h 配置文件。

opensslconf.h 的作用

宏定义 含义
OPENSSL_NO_MD2 不编译 MD2 摘要算法(已淘汰)
OPENSSL_NO_RC5 不编译 RC5 对称加密算法
OPENSSL_THREADS 支持多线程
OPENSSL_RAND_SEED_OS 使用操作系统级别的随机数种子
OPENSSL_NO_SSL3 不支持 SSLv3(安全原因已禁用)
OPENSSL_NO_WEAK_SSL_CIPHERS 不支持弱 SSL cipher
OPENSSL_NO_STATIC_ENGINE 不静态链接加密引擎

两个 openssl 目录的区别

目录 内容 是否需要跟踪
CSCU_A1_GIT/openssl-1.1.1w/ 交叉编译好的静态库(libcrypto.a, libssl.a, include/) 必须跟踪
CSCU_A1_GIT/openssl/openssl/ 编译时生成的配置文件(opensslconf.h) ❌ 应该忽略

为什么不需要跟踪?

  1. 编译产物:它是 OpenSSL 交叉编译时自动生成的,不是源码
  2. 已有完整库 :我们的 openssl-1.1.1w/ 目录包含了完整的静态库和头文件
  3. 重新编译会生成:如果重新交叉编译 OpenSSL,这个文件会自动重新生成

⚠️ 注意 :在 .gitignore 中添加了 CSCU_A1_GIT/openssl/openssl/ 来忽略这个目录,但注释掉了 CSCU_A1_GIT/openssl/openssl/ 因为它实际上没有被 Git 跟踪。


7. TEUI_07/TEUI/src/MQTT/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/TEUI_07/TEUI/src/MQTT/
目录内容 TEUI 模块的 MQTT 功能代码

判定依据

bash 复制代码
git ls-files --error-unmatch CSCU_A1_GIT/TEUI_07/TEUI/src/MQTT/ 2>/dev/null && echo "EXISTS" || echo "NEW"
# 输出: NEW(新目录)

分析

  • 不能忽略
  • 必须跟踪:这是 TEUI 模块新增的 MQTT 功能代码

8. mqtt_config.ini
项目 内容
状态 ?? (未跟踪)
文件路径 CSCU_A1_GIT/FileReleaseFiles/nandflash/mqtt_config.ini
文件内容 MQTT 配置文件

判定依据

  • 这是 MQTT 连接参数的配置文件
  • 部署时需要拷贝到板子

分析

  • 建议跟踪:配置文件是部署必需的

9. FileReleaseFiles/nandflash/sbin/mqtt/lib/
项目 内容
状态 ?? (未跟踪)
目录路径 CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/lib/
目录内容 MQTT 相关库文件

分析

  • ⚠️ 需要确认目录内容
  • 如果包含必要的库文件,需要跟踪

已修改文件分析


10. *.pro.user 文件
文件 说明
CSCU_A1_GIT/CSCU_A1_Manage.pro.user Qt Creator 用户项目配置

判定依据

  • 必须忽略*.pro.user 是 Qt Creator 的用户配置
  • 不同电脑的路径、构建目录不同,不应该共享

忽略规则

复制代码
*.pro.user
*.pro.user.*

11. *.tar.gz 文件
文件 说明
CSCU_A1_GIT/setup/Debug_setup_07.tar.gz 安装包
CSCU_A1_GIT/setup/Release_setup_07.tar.gz 安装包

判定依据

  • ⚠️ 可以忽略:压缩包可以在构建时重新生成
  • 但如果作为发布版本备份,可以跟踪

忽略规则

复制代码
*.tar.gz
*.tar.bz2
*.tar.xz
*.zip
*.rar

12. Makefile.* 文件
文件 说明
CSCU_A1_GIT/Bus/Makefile.Bus Qt 自动生成的 Makefile
CSCU_A1_GIT/Card/Makefile.Card Qt 自动生成的 Makefile

判定依据

bash 复制代码
# Qt 项目中,qmake 会根据 .pro 文件自动生成 Makefile
# 例如:qmake MqttServer.pro 会生成 Makefile

# 这些文件是自动生成的,不需要跟踪

分析

  • 必须忽略:Makefile 由 qmake 自动生成
  • 重新克隆后执行 qmake 会自动重新生成

忽略规则

复制代码
CSCU_A1_GIT/*/Makefile
CSCU_A1_GIT/*/Makefile.*
!CSCU_A1_GIT/Makefile.CSCU_A1  # 但保留主 Makefile

⚠️ 例外情况

复制代码
!CSCU_A1_GIT/Makefile.CSCU_A1  ← 这个不要忽略

原因:主 Makefile 可能包含额外的自定义配置


13. build-* 目录
目录 说明
build-CSCU_A1_Manage-Arm_A8-Release/ Qt 构建目录

判定依据

  • 必须忽略:这是 Qt 的构建输出目录
  • 重新克隆后执行 qmake && make 会自动重新生成

忽略规则

复制代码
build-*/
Build-*/

14. *.o 文件
文件 说明
CSCU_A1_GIT/Log/Logger.o 编译产生的目标文件
CSCU_A1_GIT/Log/LoggerRepository.o 编译产生的目标文件

判定依据

  • 必须忽略.o 文件是编译产生的中间产物
  • 重新克隆后执行 make 会自动重新生成

忽略规则

复制代码
*.o

.gitignore 完整规则说明

基础语法

复制代码
# 注释行(以 # 开头)
*.[ext]      # 忽略所有指定扩展名的文件
*            # 忽略所有文件
**/file      # 忽略所有目录下的 file 文件
!file        # 不要忽略指定文件(取反)

常用模式

模式 含义 示例
*.o 忽略所有 .o 文件 *.o
build-* 忽略所有 build- 开头的目录 build-Debug/
!lib/*.a 但不要忽略 lib/ 下的 .a 文件 !lib/*.a
**/test 忽略所有目录下的 test 文件/目录 test/
dir/ 忽略指定目录 build/

本项目的 .gitignore 完整内容

gitignore 复制代码
# ============================================================================
# Qt 自动生成文件
# ============================================================================
moc_*
qrc_*
ui_*
*.moc
*.obj

# ============================================================================
# 编译产物文件(必须忽略!)
# ============================================================================

# 目标文件 (.o)
*.o

# 动态库文件
*.so
*.so.*

# 可执行文件
*.bin
*.exe
*.out

# 静态库 - 【注意】不能用 *.a 全部忽略!
# openssl-1.1.1w/*.a 和 PahoMQTT/lib/*.a 必须跟踪!
# 下面会单独用 ! 来保留它们

# ============================================================================
# Qt 项目文件
# ============================================================================
build-*/
Build-*/
*.pro.user
*.pro.user.*
*.pri.user.*
*.sln.user*
*.vcxproj.user*
*.user
*.autosave

# ============================================================================
# 压缩包文件(一般不需要跟踪)
# ============================================================================
*.tar.gz
*.tar.bz2
*.tar.xz
*.zip
*.rar

# ============================================================================
# 临时文件
# ============================================================================
*.tmp
*.bak
*.swp
*~
.DS_Store
*.log

# ============================================================================
# 证书和密钥文件(一般不需要跟踪)
# ============================================================================
*.pem
*.key
*.crt
*.p12
*.pfx

# ============================================================================
# IDE 配置
# ============================================================================
.vscode/
.idea/
*.code-workspace

# ============================================================================
# Makefile 文件说明:
# Qt 项目中 qmake 会自动生成 Makefile,不需要跟踪
# 重新克隆后执行 qmake 会自动生成
# ============================================================================

# 各个模块的 Makefile(qmake自动生成)
CSCU_A1_GIT/*/Makefile
CSCU_A1_GIT/*/Makefile.*
!CSCU_A1_GIT/Makefile.CSCU_A1

# TEUI 子模块的 Makefile
CSCU_A1_GIT/TEUI_07/TEUI/Makefile
CSCU_A1_GIT/TEUI_07/TEUI/Makefile.*

# Build 目录
build-CSCU_A1_Manage-Arm_A8-Release/

# 根目录下的 Makefile(qmake自动生成)
CSCU_A1_GIT/Makefile

# ============================================================================
# 其他可选忽略的文件(根据需要决定是否跟踪)
# ============================================================================

# 通用命令/脚本文件
CSCU_A1_GIT/cmd.txt

# MQTT 脚本和文档(如果不需要跟踪)
CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/*.sh
CSCU_A1_GIT/FileReleaseFiles/nandflash/sbin/mqtt/*.pdf

# 教程文档(如果不需要跟踪)
CSCU_A1_GIT/MqttServer_Tutorial_*.md
CSCU_A1_GIT/MqttServer_MQTT_Thread_Debug_Tutorial.md

# TEUI MQTT功能配置说明
CSCU_A1_GIT/TEUI_07/TEUI/MQTT功能配置说明.txt

# openssl 额外目录(如果存在且不需要)
CSCU_A1_GIT/openssl/openssl/

总结表格

文件/目录 状态 是否忽略 原因
toolchain.cmake ?? ❌ 不忽略 交叉编译必需
openssl-1.1.1w/ ?? ❌ 不忽略 交叉编译好的静态库和头文件
PahoMQTT/ ?? ❌ 不忽略 交叉编译好的静态库和头文件
MqttServer/ ?? ❌ 不忽略 MQTT核心代码
CSCU_A1_GIT/openssl/openssl/ (未跟踪) ✅ 忽略 OpenSSL编译产物,openssl-1.1.1w已包含完整内容
paho.mqtt.c-1.3.12/ ?? ✅ 可忽略 源码,库已编译好
mosquitto-2.0.10/ ?? ✅ 可忽略 源码,工具已编译好
*.pro.user M ✅ 忽略 用户配置,不同电脑不同
*.o M ✅ 忽略 编译产物
Makefile.* M ✅ 忽略 qmake自动生成
build-*/ M ✅ 忽略 Qt构建目录
*.tar.gz M ✅ 忽略 可重新生成
.vscode/ M ✅ 忽略 IDE配置
相关推荐
Amnesia0_01 小时前
磁盘文件系统
linux·运维·数据库
北极熊kw1 小时前
FreeBSD 安装 Xrdp 后,远程桌面时只显示白色终端 Xterm
linux·运维·服务器·rdp·freebsd·xterm
枳实-叶1 小时前
【Linux驱动开发】第二天:内核模块生命周期+内存分配全解
linux·驱动开发
前端双越老师1 小时前
3 个命令 7 个步骤,学会 git worktree 并行开发
git·ai编程·全栈
计算机安禾1 小时前
【Linux从入门到精通】第28篇:文本处理三剑客(中)——sed 流编辑器
linux·服务器·编辑器
掘根1 小时前
【微服务即时通讯】客户端数据中心
qt·微服务·架构
西门吹牛1 小时前
Pycharm编译器中部署了pyqt5,Qtdesigner无法打开了,解决方案
ide·qt·pycharm
Will_Ye2 小时前
Ubuntu:系统断网后自动重连指定wifi脚本
linux·运维·ubuntu
buhuizhiyuci2 小时前
[QT]QT入门的项目创建和项目代码的介绍
开发语言·qt