我们从TFS切换到GIT。每次启动新的构建时,我们都会尝试更新子模块。
我们遵循这个指南:https://www.visualstudio.com/en-us/docs/build/scripts/git-commands#enable
我们在49行有一个错误。
我们认为实际上我们需要进行身份验证。但我们不确定。我们使用: git pull,它可以工作,但是当我们这样做的时候:git子模块foreach git pull foreach master。我们收到消息“进入”,但什么也没发生。
是不是有人已经有这个问题了?你是怎么解决这个问题的?

发布于 2018-05-15 03:51:21
这是一个身份验证问题。您需要将OAuth令牌放入每个子模块存储库。
确保已启用build definition设置,以允许脚本访问OAuth令牌。正如文档所述,这会将令牌填充到一个名为System.AccessToken的变量中。它还将令牌填充到一个git配置设置中,当您在启用该设置后运行该设置时,您将在get source步骤结束时看到该设置。这就是git向VSTS进行身份验证的方式。您需要为每个代码库构建一个config语句,并且需要cd进入该子模块才能在该代码库中发出它。
下面是我使用的Powershell脚本:
$mods = (git submodule status) | % { ($_.Trim() -split " ")[1] }
$baserepo = ($env:BUILD_REPOSITORY_URI).TrimEnd($env:BUILD_REPOSITORY_NAME)
foreach($mod in $mods)
{
cd $mod
$cmd = 'git config http.' + $baserepo + $mod + '.extraheader "AUTHORIZATION: bearer ' + $env:System_AccessToken + '"'
write $cmd
iex $cmd
cd ..
}然后运行cmd或powershell步骤:
git submodule update --remote最后,您应该在使用完令牌之后清理它,这样OAuth就不会挂在构建代理上的.git/config文件中:
$mods = (git submodule status) | % { ($_.Trim() -split " ")[1] }
$baserepo = ($env:BUILD_REPOSITORY_URI).TrimEnd($env:BUILD_REPOSITORY_NAME)
foreach($mod in $mods)
{
cd $mod
$cmd = 'git config --unset-all http.'+ $baserepo + $mod + '.extraheader'
write $cmd
iex $cmd
cd ..
}发布于 2017-08-23 17:49:10
这似乎是由于VSTS构建使用git命令对子模块进行处理的方式造成的。
我发布了VSTS build hang up when execute git commands related to git submoudle,你可以跟进这个问题。
顺便说一句,对于OAuth,您可以在.gitmodules中添加凭证。
发布于 2018-07-29 22:46:42
我刚刚在谷歌上找到了这个问答:你可以使用相对路径,例如:
origin ssh://USERNAME@vs-ssh.visualstudio.com:22/PROJECT/_ssh/REPO (fetch).gitmodules可以包含:
[submodule "SUBMODULE"]
path = SUBMODULE
url = ../SUBMODULE祝您有愉快的一天:)
https://stackoverflow.com/questions/45820526
复制相似问题