Git 子模块和 ssh 访问

标签 git ssh git-submodules

我在使用包含多个子模块的 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/

相关文章:

c# - vsts new repo 有许多平台/语言的 gitignore 选项,但 .net/c# 没有

git - "git submodule absorbgitdirs"的对面/反面?

linux - 使用脚本 bash/expect 保持 ssh session 事件

java - 使用 JSCH、apache mina sshd 或 sshj 的 Open SSH 的 SSH Exec channel

javascript - Git 子模块、切换分支和包含外部 JS 依赖项的推荐方式(天哪)

linux - 在具有相同顶级父目录的文件夹内使用多个 Git 存储库?

git - 在不克隆远程的情况下获取远程存储库中 HEAD 指向的分支名称

git - 相当于 git pull 从存储库到当前分支的快捷方式

php - 通过 SSH 进行 MySQL 查询,在第 1 行给出错误 1064 (42000)

git - 如何通过 HTTP 代理从 Git 存储库中提取数据?