在git中修改嵌套子模块的URL

我正在使用最新版本的ardupilot固件。 目标是使ardupilot使用mavlink协议与伴侣板交谈。

我开始在我的github帐户上创建原始ardupilot存储库的一个分支。

配套板的集成需要我修改ardupilot存储库的一些子模块的代码:PX4Firmware和mavlink。

因此,为了能够做到这一点,我还在我的github账户中分配了ardupilot的各种子模块。

然后,我修改了我的ardupilot repo分支上的.gitmodules文件,以确保子模块的初始化使用我的分支而不是原来的分支。 修改如下:

[submodule "modules/PX4Firmware"]
path = modules/PX4Firmware
url = git://github.com/MY_GITHUB_ACCOUNT/PX4Firmware.git
[submodule "modules/PX4NuttX"]
path = modules/PX4NuttX
url = git://github.com/MY_GITHUB_ACCOUNT/PX4NuttX.git
[submodule "modules/uavcan"]
path = modules/uavcan
url = git://github.com/MY_GITHUB_ACCOUNT/uavcan.git
[submodule "modules/waf"]
path = modules/waf
url = git://github.com/MY_GITHUB_ACCOUNT/waf.git
[submodule "modules/gbenchmark"]
path = modules/gbenchmark
url = git://github.com/MY_GITHUB_ACCOUNT/benchmark.git
[submodule "modules/mavlink"]
path = modules/mavlink
url = git://github.com/MY_GITHUB_ACCOUNT/mavlink
[submodule "gtest"]
path = modules/gtest
url = git://github.com/MY_GITHUB_ACCOUNT/googletest

在此之后,我意识到我需要修改PX4Firmware的一个子模块的代码。 因此我在PX4Firmware回购中重复了相同的步骤:

  • 我的github帐户上的子子模块的叉子
  • PX4Firmware回购库中.gitmodules文件的修改如下:

    [submodule "mavlink/include/mavlink/v1.0"]
    path = mavlink/include/mavlink/v1.0
    url = git://github.com/MY_GITHUB_ACCOUNT/c_library.git
    [submodule "src/modules/uavcan/libuavcan"]
    path = src/modules/uavcan/libuavcan
    url = git://github.com/UAVCAN/libuavcan.git
    [submodule "Tools/genmsg"]
    path = Tools/genmsg
    url = https://github.com/ros/genmsg.git
    [submodule "Tools/gencpp"]
    path = Tools/gencpp
    url = https://github.com/ros/gencpp.git
    [submodule "src/lib/matrix"]
    path = src/lib/matrix
    url = https://github.com/PX4/Matrix.git
    [submodule "src/lib/DriverFramework"]
    path = src/lib/DriverFramework
    url = https://github.com/PX4/DriverFramework.git
    [submodule "src/lib/ecl"]
    path = src/lib/ecl
    url = https://github.com/PX4/ecl.git
    
  • 修改文件后,我运行命令git submodule syncgit submodule update 。 我也提交了两个.gitmodules文件并将它们推送到相应的主分支。

    要查看它是否工作正常,我将ardupilot的分支克隆到一个新文件夹中,并递归初始化所有子模块:

    git clone https://github.com/MY_GITHUB_ACCOUNT/ardupilot.git
    cd ardupilot
    git submodule update --init --recursive
    

    不幸的是,它没有按预期工作。 虽然我的ardupilot叉子的子模块似乎是从我的github下载的,但PX4Firmware的子模块仍然是从原始回购站下载的。

    在这里你可以找到git子模块更新的输出--init --recursive命令:https: //pastebin.com/ECi4wQEZ

    我的问题是,我无法对原始存储库进行提交,当然,因为我理解,我必须用叉子来跟踪我的修改。

    我发现并在stackoverflow上尝试了很多asnwers:

  • 如何用另一个回购库替换一个git子模块?
  • 更改git子模块的远程存储库
  • 和其他许多人,但他们都没有在我的案件工作。

    你有什么建议吗?

    谢谢。

    --------更新--------

    与此同时,我找到了一种使其工作的方法。

    我在这里描述这个过程以防万一有人需要它,或者知道一个更好的方法来做到这一点:

    我开始解决有关子子模块url的问题:确保PX4Firmware repo使用git://github.com/MY_GITHUB_ACCOUNT/c_library.git而不是原来的。

    程序如下:

  • 在我的github上进入PX4Firmware回购的主页面
  • 修改.gitmodules文件(更改url)。 注意:我发现git协议不允许推送,因此我使用了https。
  • 保存更改。
  • 在PC上克隆PX4Firmware存储库。
  • 在使用命令git submodule update -init --recursive进入PX4Firmware repo的根文件夹后初始化子模块
  • cd进入子模块文件夹
  • 运行命令git checkout __sha__其中sha是我的本子副本模块的最新提交。
  • cd升一级
  • 运行命令git add submodule_folder
  • git commit然后推送
  • 在主存储库(ardupilot)中,我重复了相同的过程,以确保PX4Firmware子模块是我的存储库上的分支,而不是原来的分支。

    我相信有更好的方法来做到这一点。 如果你知道,请分享。 我也希望这可以帮助有同样问题的其他人。

    链接地址: http://www.djcxy.com/p/92323.html

    上一篇: Modify URL of a nested submodule in git

    下一篇: Git add all repositories under a certain path as submodules recursively