如何在本地更改子模块 remote url 必须提交这些更改

How to change a submodule remote url locally having to commit back these changes

我有一个项目应该在 Windows 和 Linux 下工作。我将中央存储库作为文件夹放在我们公司的服务器上。它旁边是一个存储库,它是该存储库的子模块。

现在我可以使用 \server\project 之类的东西访问 Windows 下的这个文件夹。 Linux 下的文件夹名称是 /mnt/server/project。项目仓库和子模块仓库都放在该文件夹的不同子目录中。当我在 Windows 上添加子模块并推送后,我想在 Linux 上更新我的项目时,这给我带来了问题。有没有办法在不将这些更改提交回中央存储库的情况下在本地更改 .gitmodules 中的子模块 url?

根据我所使用的平台,在 .gitmodules 文件中设置 urls 也是可以的。也许还有其他选择。

您可以随时编辑 .gitmodules 中的 url,然后编辑 git submodule sync.gitmodules 中的更改将显示在 git status 中,但也许您可以接受。

最好的办法是找到一种方法让 url Linux 和 Windows 都能理解,比如不使用挂载点。不能直接用IP吗?像 192.168.0.42/project/submodule.git 这样的东西? (当然用你服务器的IP替换。或者如果你有一个主机名显然会更好)。

您应该在 .gitmodules 文件中使用相对路径。 如果您的两个存储库存储在服务器下的文件夹中,例如:

  • /mnt/server/project/MainProject.git (Linux) \server\project\MainProject.git (Windows)
  • /mnt/server/project/SubmoduleName.git (Linux) \server\project\SubmoduleName.git (Windows)

你的 .gitmodules 文件应该包含这样的条目(假设你已经存储了 linux 路径):

[submodule "SubmoduleName"]
    path = SubmoduleFolder
    url = /mnt/server/project/SubmoduleName.git 

您可以这样更改以使用相对 URLs(注意:相对 URL 语法是 "unix way",但它在 Windows 下可以正常工作也是。)

[submodule "SubmoduleName"]
    path = SubmoduleFolder
    url = ../SubmoduleName.git

提交并推送此更改。现在你可以像往常一样在 Windows 或 Linux 下克隆你的主项目,子模块路径将自动解决。