Git Azure函数:需要Creds的子模块:致命:无法读取的用户名

Git Azure函数:需要Creds的子模块:致命:无法读取的用户名,git,azure,deployment,continuous-deployment,azure-functions,Git,Azure,Deployment,Continuous Deployment,Azure Functions,我有一个Azure Function应用程序,可以从VisualStudio.com团队服务git存储库持续部署。它利用子模块。其中的一个子模块在GitHub上公开提供,它可以完美地加载,没有任何问题 另一个子模块由VisualStudio.com团队服务Git回购(与主回购在同一帐户下)担保。此子模块在部署时出错 ,子模块通过以下两个git命令启动: git submodule sync git submodule update --init --recursive --force 第一个命

我有一个Azure Function应用程序,可以从VisualStudio.com团队服务git存储库持续部署。它利用子模块。其中的一个子模块在GitHub上公开提供,它可以完美地加载,没有任何问题

另一个子模块由VisualStudio.com团队服务Git回购(与主回购在同一帐户下)担保。此子模块在部署时出错

,子模块通过以下两个git命令启动:

git submodule sync
git submodule update --init --recursive --force
第一个命令似乎执行正确,第二个命令似乎出错。以下是输出:

Cloning into 'secure-submodule'...
Fatal: COMException encountered.\r
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for ''https://myVSStudio.visualstudio.com': Invalid argument
fatal: clone of 'https://myVSStudio.visualstudio.com/DefaultCollection/_git/secure-submodules' into submodule path 'secure-submodules' failed
我假设这是因为第二个子模块需要凭证,但我不确定如何提供凭证


由于主要项目连续部署是从受保护的git存储库中提取的,因此我认为子模块也可以这样做。

作为一种解决方法,我更新了.gitmodules文件,以便URL包含用户名和密码,并且我创建了一个用于URL的

e、 g.在.gitmodules中,url已更改:

[submodule "mySub"]
    path = mySub
    url = https://mysub:PERSONAL_ACCESS_TOKEN_VALUE@YOUR_GIT_REPO_URL
可通过以下步骤进行设置:

当我创建个人访问令牌时,我将其仅限于代码读取操作

我不喜欢这个解决方案的地方(我希望其他人有更好的):

  • 个人访问令牌返回到主项目上的源代码管理
  • 我看不到一种方法可以将个人访问令牌限制为只有一个 存储库,因此此令牌可用于读取我拥有的任何存储库 访问
  • 您必须指定令牌有效的时间段,最长时间段为一年。这在某些方面是好的,但我相信一年后我会完全忘记我做了什么来让它工作,我相信错误信息不会那么明显

  • 我刚刚在一个私有代理上运行Azure管道时遇到了同样的问题,这个解决方案可能适合您所拥有的。我已经在运行
    git config--global credential.helper cache
    的Host Agent上配置了git凭据缓存,分别输入用户名和密码以及个人访问令牌和令牌的名称
    git config--global credential.helper store
    它存储一个字符串,如
    https://[pat_name]:[token]@[owner].visualstudio.com
    on。git凭据在我的情况下不起作用,但可能有助于您的情况。我知道你可能已经摆脱了这个问题,但我希望它能帮助任何仍在努力解决这个问题的人