我有一个Azure功能应用程序,可以从VisualStudio.com Team Services git存储库继续部署。它利用子模块。其中一个子模块在GitHub上公开可用,它可以很好地加载而没有任何问题。
另一个子模块在VisualStudio.com Team Services Git仓库(与主仓库相同的帐户下)后面得到保护。此子模块在部署时出错。
Based on information provided by Microsoft,使用以下两个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存储库中提取的,我认为子模块可以做同样的事情。
答案 0 :(得分:2)
作为一种解决方法,我更新了.gitmodules文件,以便URL包含用户名和密码,并创建了一个Personal Access Token以在URL中使用。
e.g。在.gitmodules中,网址已更改:
[submodule "mySub"]
path = mySub
url = https://mysub:PERSONAL_ACCESS_TOKEN_VALUE@YOUR_GIT_REPO_URL
可以通过以下方式设置:
https://YOUR_SUB_DOMAIN.visualstudio.com/_details/security/tokens
当我创建个人访问令牌时,我将其限制为仅对代码读取操作。
我不喜欢这个解决方案(我希望其他人有更好的解决方案):
答案 1 :(得分:1)
我刚刚在私有代理上运行Azure管道时遇到了同样的问题,该解决方案可能适合您所拥有的解决方案。我已经在运行git config --global credential.helper cache
的主机代理上配置了git凭据缓存,分别输入了用户名和密码(分别名为Personal Access Token和Token)。 git config --global credential.helper store
在 .git-credentials 上存储了https://[pat_name]:[token]@[owner].visualstudio.com
这样的字符串,在我的情况下不起作用,但可能会对您有所帮助。我知道您可能已经摆脱了这个问题,但我希望它可以帮助仍在为此问题上挣扎的任何人。