Git子模块密码提示

17

我正在尝试设置git部署环境,在该环境中,当我准备好时,会将更改推送到托管在暂存服务器上的git仓库,然后使用post-receive hook从各个分支部署代码到相应的Web根目录。

然而,我遇到的一个问题是每次运行git submodule update时,我都会收到密码提示,导致部署脚本卡住。

到目前为止,我尝试过以下几种方法:

  1. 子模块托管在公共仓库上,因此我只是要从中读取,不明白为什么需要密码。
  2. 话虽如此,为了解决这个问题,我为暂存服务器创建了新的ssh密钥,并且在除这种情况外的情况下都能够正常克隆/提取,没有任何问题。
  3. 我还检查了.gitmodules和.git/config文件,以确保从正确的位置拉取子模块。
  4. 在运行git submodule update时,当出现密码提示时,只需将密码留空并按Enter键似乎可以正常更新,但是出现提示是导致我的挂钩脚本出现问题的原因。

需要注意的一点是,在我的暂存服务器上设置仓库时,由于防火墙限制,我无法从我的工作实例中克隆仓库,因此我在本地克隆了一个副本,然后将该新克隆的版本移动到服务器上,并且一直都能够成功推送。

希望获得任何可以提供的建议或技巧。


1
看起来重新克隆存储库解决了这个问题。 - SS44
4个回答

23

我遇到了同样的问题,我的情况是将子模块“url”设置为https URL而不是git@ URL引起的。


这对我有用。然而,仅仅在.submodules和配置文件中更改URL并不起作用。我实际上必须删除submodule complicated,然后再添加它。 - Adam
7
我也是,但我可以通过在主仓库中运行此命令 git submodule sync --recursive 来避免完全删除子模块。这将更新所有子模块的URL。 - Johnny Fekete
如果您不想与git子模块同步,可以将.gitmodules的URL更改为ssh@,并且还需要在.git/config下更改子模块的URL为ssh。 - felipekm

10

在 .gitsubmodule 文件中,将 https://.. 更改为 git@... 后,运行以下命令:

git submodule sync --recursive


1
如果您无法将https://替换为git@,则可以选择在您的~/.netrc文件中设置密码。以下是格式:
machine githostname.com
  login yourgitusername
  password yourgitpassword

0

在提供子模块的 URL 时,您可以使用本地文件路径或 URL。

如果提供 URL,请尝试使用像这样的内容:"git@bitbucket.org:myOrg/myRepo.git"

这允许系统 Git 使用适当的用户访问仓库,如果您使用 https://username@... 那么另一个用户将不得不提供访问仓库所需的凭据,或者您自己如果还没有设置带有用户的 Git。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接