我们从TFS切换到GIT。 我们每次启动新版本时都会尝试更新子模块。
我们遵循了本指南:https://www.visualstudio.com/en-us/docs/build/scripts/git-commands#enable
我们在第49行发生错误。
我们认为实际上我们需要进行身份验证。但我们不确定。 我们使用:git pull,它的工作原理 但是当我们这样做时:git submodule foreach git pull origin master。 我们有消息"进入"并没有任何反应
有人已经有这个问题吗?你是怎么解决的?
答案 0 :(得分:1)
这似乎是由使用带子模块的git命令构建VSTS的方式引起的。
我发布了VSTS build hang up when execute git commands related to git submoudle,您可以跟进此问题。
顺便说一句,对于OAuth,您可以在.gitmodules
中添加凭证。
答案 1 :(得分:1)
这是一个身份验证问题。您需要将OAuth令牌放入每个子模块存储库中。
确保您已启用允许脚本访问OAuth令牌的构建定义设置。如文档所述,这会将令牌填充到名为System.AccessToken的变量中。它还会将令牌填充到git配置设置中,当您在启用设置后运行它时,您将在获取源步骤结束时看到该设置。这就是git对VSTS进行身份验证的方式。您需要为每个repos构建一个config语句,并且您需要cd进入该子模块以在该repo中发布它。
以下是我使用的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 ..
}
答案 2 :(得分:0)
刚刚通过谷歌搜索发现了这个问题: 您可以使用相对路径,例如:
origin ssh://USERNAME@vs-ssh.visualstudio.com:22/PROJECT/_ssh/REPO (fetch)
.gitmodules可以包含:
[submodule "SUBMODULE"]
path = SUBMODULE
url = ../SUBMODULE
祝你有美好的一天:)
答案 3 :(得分:0)
在您的.gitmodules文件中,您可以尝试在网址中添加组织名称(区分大小写)
[submodule "MySubModule"]
path = MySubModule
url = https://<Organization Name>@dev.azure.com/<Organization Name>/_git/<Project Name>