3

我的 git 项目中有一个子模块,我对其进行了一些更改,并将其上传到我自己的 git 服务器以对其进行分叉。我已将主 git 存储库中的源 URL 更改为新子模块的位置,并运行git submodule sync以使我的.git/config文件是最新的。然后我将所有内容推送到存储我的数据的 Bitbucket。但是,当我克隆我的主 git 存储库时,它仍在从旧位置拉取子模块的数据。知道可能导致这种情况发生的原因以及如何解决吗?当我克隆存储库时,它使我的分叉更改不会出现。

4

3 回答 3

1

一旦你修改了.gitmodules文件, agit submodule sync只会修改你的.git/config,但不会改变任何内容.git/modules/yourSubmodule

这意味着一个简单git submodule update yourSubmodule的仍然会使用存储在 中的 url .git/modules/yourSubmodule/config,因此是“旧”url。

但如果你这样做:

git submodule update --init yourSubmodule

然后使用正确的.git/modules/yourSubmodule新 url 再次初始化,并且子模块是从该新 url 克隆的。

为此,我更喜欢先从工作树中完全删除子模块

# restore an empty yourSubmodule directory
rm -Rf yourSubmodule ; git checkout -- yourSubmodule
# update .gitmodules
git submodule sync
git submodule update --init yourSubmodule
于 2013-05-24T07:16:00.317 回答
1

很可能您的 .gitmodules 文件不正确。

如果您使用文本编辑器打开它,您将看到如下内容:

[submodule "externals/submodule"]
    path = externals/submodule
    url = git@github.com:Original/repo.git

将 url 更改为更新的位置,重新运行git submodule sync,你应该很高兴。

于 2013-05-24T04:45:29.980 回答
0

.gitmodules检查和中的 URL 设置your_submodule/.git/config

于 2013-05-24T04:39:01.690 回答