如何将本地子模块推送到Github上的远程仓库?

quhf5bfb  于 2023-05-27  发布在  Git
关注(0)|答案(1)|浏览(189)

我开始在Github上创建一个repo(https://github.com/BenEngbers/BasexCpp
然后我创建了一个本地Git仓库并添加了2个子模块。这是我的master的.git/config:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:BenEngbers/BasexCpp.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
    remote = origin
    merge = refs/heads/main
[branch "master"]
    remote = origin
    merge = refs/heads/master

这是.gitmodules:

[submodule "libBasexTest"]
    path = libBasexTest
    url = git@github.com:BenEngbers/BasexCpp.git
[submodule "libBasexCpp"]
    path = libBasexCpp
    url = git@github.com:BenEngbers/BasexCpp.git

编辑
我将.gitmodules改为:

[submodule "libBasexTest"]
    path = libBasexTest
    url = ../libBasexTest
[submodule "libBasexCpp"]
    path = libBasexCpp
    url = ../libBasexCpp

现在我看到libBasexCpp@ef9a760指向https://github.com/BenEngbers/libBasexCpp/tree/ef9a7608c089e76415a58537540c31ec1661cf0e
url的正确值应该是什么?
结束编辑
我第一次使用

git submodule add git@github.com:BenEngbers/BasexCpp.git libBasexTest
git submodule add git@github.com:BenEngbers/BasexCpp.git libBasexCpp

将模块添加到远程存储库。在向两个子模块添加内容之后,我使用

git push --recurse-submodules=on-demand

推到遥控器上。
在推送Git报告说一切都是最新的,但当我试图打开远程子模块时,我收到了一个错误通知(“看起来有些问题”)。
我在Google上找到的所有信息都告诉我如何将远程子模块导入到本地存储库中,但我没有找到任何关于如何首先创建远程子模块,然后推送到新模块的说明。
任何帮助都很感激

g52tjvyc

g52tjvyc1#

子模块是独立的存储库。它们需要指向单独的远程存储库。
这是:

[submodule "libBasexTest"]
    path = libBasexTest
    url = git@github.com:BenEngbers/BasexCpp.git
[submodule "libBasexCpp"]
    path = libBasexCpp
    url = git@github.com:BenEngbers/BasexCpp.git

是错误的,因为您的两个本地子模块都指向同一个远程存储库git@github.com:BenEngbers/BasexCpp.git。将子模块视为不同的独立项目,您需要将一个项目作为另一个项目的一部分。此子模块可以是多个父项目的一部分。
我想你可能已经在正确的轨道上与你的编辑,但你改变的网址似乎不仓库:github上的仓库通常以. git结尾。
你怎么解决这个问题?你需要在github上为每个子模块创建一个仓库。完成后,您可以使用以下命令将子模块添加到父存储库中:

git submodule add git@github.com:BenEngbers/libBasexTest.git libBasexTest
git submodule add git@github.com:BenEngbers/libBasexCpp.git libBasexCpp

请注意,每个目录/子模块都有自己的远程存储库URL。
当你在目录libBasexTestlibBasexCpp中进行更改时,你在子模块中工作,你提交并推送到这些远程。与父存储库BasexCpp无关,工作是独立的。
在你在父仓库中提交的时候,你 * 指出子模块中的哪个提交必须被使用 *。父存储库不知道子模块的内容:它唯一知道的是“在那个目录中,我必须从URL www.example.com checkout 提交[SHA-1]git@github.com/asdfasdfasdf”。

相关问题