问:

        我现在没有明白这里边的道理,我现在本地已经克隆了官方的autoware,在我本地的文件/home/xiaoan/autoware/src中已经有了core、launcher、middleware、sensor_component、universe这些文件,并且我已经编译成功,你所谓的元仓库就是我克隆下来的这个autoware么。然后我之前推送的到github仓库的main和tinyPLC_vehicle-base两个分支里边的内容是什么呢,是我本地的元仓库autoware么,请你帮我理清楚,我是小白。

答:

        你本地克隆下来的顶层 ~/autoware 就是我们说的“元仓库(meta-repo)”。但**src/ 里的代码大部分不是这个元仓库自身的内容**,而是很多“子仓库”(各自独立的 Git 仓库)。你把 mainvehicle/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.universesrc/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的代码“进体系”?

我们走官方推荐的“元仓库 + 自己的个体化仓库”的路子:

  1. 在 GitHub 建 4 个你自己的仓库(后边只需克隆到本地,然后更新即可)

    • tinyPLC_vehicle(里面放 tinyPLC_vehicle_description / tinyPLC_vehicle_launch 两个包)

    • tinyPLC_sensor_kit_launch

    • tinyPLC_individual_params

    • autoware_launch.tinyPLC_vehicle

  2. 修改顶层 ~/autoware/autoware.repos:把上述 4 个仓库加进去/替换 sample 项。提交并推到你的元仓库(这一步就是“更新购物清单”)。

  3. 同步本地子仓

    cd ~/autoware
    vcs import src < autoware.repos   # 会把你自己的 tinyPLC_* 仓库克隆到 src/ 对应位置
    
  4. 以后改 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.reposvcs import

  • 如果第 2 条远端不是你自己的 fork,而你想改 autoware_launch 的内容,那就先 fork autoware_launch 到你账号,再把 autoware.repos 的对应项改成你的 fork 地址,然后 vcs pull src

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐