理解autoware元仓库(meta-repo)以及从github上克隆到本地的autoware/src中的文件的关系,还有autoware.repos的作用
我现在没有明白这里边的道理,我现在本地已经克隆了官方的autoware,在我本地的文件/home/xiaoan/autoware/src中已经有了core、launcher、middleware、sensor_component、universe这些文件,并且我已经编译成功,你所谓的元仓库就是我克隆下来的这个autoware么。然后我之前推送的到github仓库的main和tinyPLC_vehi
问:
我现在没有明白这里边的道理,我现在本地已经克隆了官方的autoware,在我本地的文件/home/xiaoan/autoware/src中已经有了core、launcher、middleware、sensor_component、universe这些文件,并且我已经编译成功,你所谓的元仓库就是我克隆下来的这个autoware么。然后我之前推送的到github仓库的main和tinyPLC_vehicle-base两个分支里边的内容是什么呢,是我本地的元仓库autoware么,请你帮我理清楚,我是小白。
答:
你本地克隆下来的顶层 ~/autoware
就是我们说的“元仓库(meta-repo)”。但**src/
里的代码大部分不是这个元仓库自身的内容**,而是很多“子仓库”(各自独立的 Git 仓库)。你把 main
或 vehicle/tinyPLC_vehicle-base
推到你的 GitHub,只是把顶层元仓库(含 autoware.repos
等文件)推上去,并不会把 src/
里那些子仓库的代码一并推上去。
-
元仓库(你本地的
~/autoware
)= 购物清单:关键文件是autoware.repos
(以及你导出的pinned-*.repos
)。它只记录“要去哪里拿哪些代码、拿哪个版本(SHA/分支)”。 -
子仓库(你在
src/
里看到的core/…
、launcher/…
、universe/…
下的各个项目)= 真正的商品:它们各自都是独立的 Git 仓库,有各自的origin
(通常指向autowarefoundation/*
)。 -
你 push 顶层元仓库到 GitHub → 相当于把“购物清单”传给别人,别人拿到清单(
autoware.repos
)后,运行vcs import
,就能把同一批“商品”(那些子仓)再拉下来。
本地的autoware中的src中的这几个仓库中的源代码代码就是因为当时根据官方的autoware.universe安装教程跑过下边这个命令,将这些代码按照autoware.repos的规则克隆下来了。
vcs import src < autoware.repos
这条命令会按照清单把子仓库克隆到 src/
。于是你就看到了:
src/
core/...
launcher/...
middleware/...
sensor_component/...
universe/...
注意:这些分组目录下面才是真正的 Git 子仓根目录,例如:
src/universe/autoware.universe/.git
src/launcher/autoware_launch/.git
...
它们各自有自己的远端和分支,不属于顶层 ~/autoware
这个 Git 仓库的版本历史。
而你从本地推到你的 GitHub 的 main
/ tinyPLC_vehicle-base
里面到底有什么?
只会包含顶层元仓库跟踪的文件,典型是:
-
autoware.repos
(以及你以后要改的版本固定文件pinned-YYYY-MM-DD.repos
) -
顶层的 README、工具脚本、CI 配置等
不会包含src/universe/autoware.universe
、src/launcher/autoware_launch
等子仓的源码,因为那些是独立 Git 仓库。
你可以自己验证:
# 顶层仓库实际被跟踪的文件(就是 push 上去的内容)
git -C ~/autoware ls-files | head -n 20
# 看看 src 下有哪些“独立的 Git 子仓”
find ~/autoware/src -name .git -type d | sed 's#/\.git##'
该怎样让tinyPLC的代码“进体系”?
我们走官方推荐的“元仓库 + 自己的个体化仓库”的路子:
-
在 GitHub 建 4 个你自己的仓库(后边只需克隆到本地,然后更新即可):
-
tinyPLC_vehicle
(里面放tinyPLC_vehicle_description
/tinyPLC_vehicle_launch
两个包) -
tinyPLC_sensor_kit_launch
-
tinyPLC_individual_params
-
autoware_launch.tinyPLC_vehicle
-
-
修改顶层
~/autoware/autoware.repos
:把上述 4 个仓库加进去/替换 sample 项。提交并推到你的元仓库(这一步就是“更新购物清单”)。 -
同步本地子仓:
cd ~/autoware vcs import src < autoware.repos # 会把你自己的 tinyPLC_* 仓库克隆到 src/ 对应位置
-
以后改 tinyPLC 的代码,要在对应“子仓库”里 commit & push,而不是在顶层元仓库里。比如:
cd ~/autoware/src/vehicle/tinyPLC_vehicle # 这是一个独立 Git 仓库 git remote -v # 确认是你的仓库 # 开发 -> 提交 -> 推到 tinyPLC_vehicle 仓库 git add . git commit -m "feat: add vehicle_info.param.yaml" git push -u origin main
同时,顶层元仓库只负责两个动作:
-
管“清单”与版本固定(维护
autoware.repos
/pinned-*.repos
); -
把这两份文件 push 上去,保证团队能复现同一套依赖。
你现在可以做一个自检
# 1) 顶层元仓库的远端(你自己的 autoware.tinyPLC_vehicle)
git -C ~/autoware remote -v
# 2) 任意一个子仓(例如 autoware_launch)的远端(还指向 autowarefoundation)
git -C ~/autoware/src/launcher/autoware_launch remote -v
# 3) 你自己的 tinyPLC_vehicle 子仓是否已经被克隆到 src/
ls ~/autoware/src/vehicle/ | grep tinyPLC || echo "还没导入到 src/"
-
如果第 3 条显示“还没导入到 src/”,说明你还没把它写进
autoware.repos
并vcs import
; -
如果第 2 条远端不是你自己的 fork,而你想改 autoware_launch 的内容,那就先 fork
autoware_launch
到你账号,再把autoware.repos
的对应项改成你的 fork 地址,然后vcs pull src
。
更多推荐
所有评论(0)