Git 使用过程中遇到的问题整理
一、本地文件夹存在,但 GitHub 上没有上传
展开
问题现象
本地存在如下目录:navigation_system_ws/src/livox_ros_driver2
但执行 git push 后:
- GitHub 仓库中看不到该文件夹
- 本地确认文件真实存在
排查过程
1. 检查是否被 .gitignore 忽略
1git check-ignore -v livox_ros_driver2如果输出类似:.gitignore:12
/说明该目录被忽略。
👉 本次排查中未被忽略。
2. 查看 Git 状态
在仓库根目录执行:
1git status输出:
1位于分支 master2
3未跟踪的文件:4 (使用 "git add <文件>..." 以包含要提交的内容)5
6 navigation_system_ws/src/livox_ros_driver2/7
8提交为空,但是存在尚未跟踪的文件说明:
该目录尚未被 Git 跟踪(未执行 git add)。
3. 尝试添加后出现警告
执行:
1git add .出现提示:
1正在添加嵌入式 git 仓库:livox_ros_driver2并提示:
1You've added another git repository inside your current repository问题根因
livox_ros_driver2 本身是一个独立的 Git 仓库:
1livox_ros_driver2/2├── .git3├── package.xml4├── CMakeLists.txt5└── ...属于嵌套 Git 仓库(nested git repository)。
Git 不会自动将其当作普通目录提交。
正确解决方案:使用 Git Submodule
第三方驱动 / SDK 正确的管理方式应为 submodule。
添加 submodule:
1git submodule add https://github.com/Livox-SDK/livox_ros_driver2.git \2 navigation_system_ws/src/livox_ros_driver2clone 项目时:
1git clone --recurse-submodules git@github.com:xxx/Car_AMR.git或:
1git submodule update --init --recursive更新代码时:
1git pull --recurse-submodules小结
submodule 只记录:
- 仓库地址
- 指定 commit
不会复制源码进主仓库。
非常适合管理第三方依赖(ROS 驱动 / SDK / 算法库)。
二、Git 中存在多个 remote(1111 / github)
展开
问题现象
在 Git 提交图中看到:

11111/master2github/master看起来像是:
有两个 GitHub 仓库。
实际原因
这是多个 remote 指向同一个仓库地址导致的。
查看:
1git remote -v看到:
11111 git@github.com:wdxzf/Car_AMR.git (fetch)21111 git@github.com:wdxzf/Car_AMR.git (push)3github git@github.com:wdxzf/Car_AMR.git (fetch)4github git@github.com:wdxzf/Car_AMR.git (push)说明:
1111和github只是远程仓库别名- 实际 URL 完全相同
正确清理方式
删除无意义的 remote:
1git remote remove 1111推荐统一命名为 origin:
1git remote rename github origin最终效果:
1origin git@github.com:wdxzf/Car_AMR.git (fetch)2origin git@github.com:wdxzf/Car_AMR.git (push)建议规范
| 类型 | 命名 |
|---|---|
| 主仓库 | origin |
| 上游仓库 | upstream |
避免使用无意义命名(如 1111、test)。
三、总结
本次问题主要涉及两个 Git 中高级概念:
- Submodule(子模块)
- Remote(远程仓库别名)
它们是大型工程(ROS / 自动驾驶 / 多仓库项目)中必不可少的 Git 技能。
掌握后可以有效避免:
- 文件“明明存在却无法提交”
- 仓库结构混乱
- 第三方依赖无法同步
- clone 后项目不完整
经验结论
第三方代码一定不要直接拷进仓库。
能用 submodule 的,一定用 submodule。