我在使用包含多个子模块的 git 存储库时遇到了一些问题。
super git仓库是用命令构建的
mkdir projectname
cd projectname
git init
git submodule add ssh://myusername@server/pathtorepos
当另一个用户(“otheruser”)随后克隆 super 存储库时,一切似乎都正常了。但是当需要访问子模块时
git submodule init
git submodule update
git 尝试使用“myusername”而不是“otheruser”克隆子模块。
如何解决这个问题?
最佳答案
如果可能,最好确保 .gitmodules
文件包含任何人都可以克隆的存储库的 URL,通常是 git://
或 http://
网址。然后自己有 SSH 访问权限的用户可以在克隆后更改到子模块并更改 remote.origin.url
中的 URL。使用用户名指向 SSH URL,例如:
cd my-submodule
git remote set-url origin otheruser@server:/pathtorepos
即使在当前情况下,其他用户也应该能够做到这一点。 更新: Chris Johnsen 在下面指出,在 .gitmodules
中使用 SSH URL 也是合理的如果您省略用户名并且存储库的所有用户都将具有 SSH 访问权限 - 如果本地和远程不同,他们将需要添加与上述类似的用户名。
请注意 .gitmodules
中的 URL仅在初始化子模块时使用。初始化子模块设置配置值 submodule.<SUBMODULE-NAME>.url
在主项目中提交到 .gitmodules
中的任何内容- 这是将在第一次子模块更新时使用的值。在初始化和更新子模块之间,您还可以使用如下命令更改将用于第一次更新的 URL:
git config submodule.my-submodule.url otheruser@server:/pathtorepos
确实,如果第一次更新失败,您可能需要这样做。第一次更新子模块后,您需要更改的 URL 是为 origin
定义的。在子模块中 - 此时只有设置 submodule.my-submodule.url
才有用如果您可能要删除并重新更新子模块,请在主项目中配置值。
关于Git 子模块和 ssh 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6031494/