【问题标题】:YAML pipeline error - unable to find folder that Git auto-combines with subfolderYAML 管道错误 - 找不到 Git 自动与子文件夹组合的文件夹
【发布时间】:2021-07-04 15:24:16
【问题描述】:

我有一个通过 Azure DevOps 使用的 Git 存储库,我将文件夹和文件的层次结构复制到该存储库。其中一些文件夹仅包含另一个文件夹。例如:

内容

  • epm
    • bin(其中包含文件)
    • xin(这里包含文件)
  • edc
    • bin(其中包含文件)

Git 会自动将 edcbin 文件夹合并到文件树中的 edc\bin 中。我什至尝试使用占位符文件手动创建edc 文件夹,然后在该文件夹下使用占位符文件创建bin 文件夹,然后删除edc 下的占位符文件...一旦我这样做了,它就结合了@ 987654327@ 和bin 回到edc\bin

问题在于,当通过 YAML 管道将其构建到 NuGet 包中时,这似乎是一个问题。我使用生成.nuspec 文件并添加要包含的内容的powershell 脚本。这很好用,它指定每个单独的文件夹和这些文件夹中的每个文件。所以它添加的条目之一是...content\edc。但随后在打包.nuspec 的 NuGet Pack 步骤中,它失败了,并出现找不到...content\edc 的错误。只是因为在 repo 的文件树中,没有 ...content\edc - 只有 ...content\edc\bin

有没有办法停止自动组合只包含一个文件夹的文件夹?如果没有,我可以在哪里提交问题/请求以进行更改?

我不想尝试更改文件夹结构或添加额外的东西,因为这些文件已经在我们的各种项目中使用,我正在将其转换为 Git repo 和 NuGet 包以便更好地管理并且不要'不想破坏现有的功能。

【问题讨论】:

    标签: git powershell azure-devops nuget-package


    【解决方案1】:

    它没有合并文件夹,它只是直观地告诉您“edc”中没有直接的文件。这完全是微软的审美选择(顺便说一句,Github 也是这样做的)。你可以使用任何Git客户端来检查文件系统,都是正常的。

    似乎没有任何方法可以禁用此功能。

    【讨论】:

    • 是的,如果在 URL 中删除“%2Fbin”,我实际上可以访问“edc”文件夹本身。但我需要管道能够找到...“content\edc”。
    • edc 文件夹还在。只要你有 something 在里面,它就会一直存在。请注意,Git 不存储文件夹 - 只是文件。因此,如果您的文件夹中没有文件或子文件,则该文件夹基本上不存在。
    【解决方案2】:

    显然我的问题是 .nuspec 文件不应在“文件”部分包含文件夹。我添加了对文件扩展名的检查,如果它是空白的,请不要将其添加到列表中。

    我设法将“目标”设置为与存储库中相同的文件结构。这是用于创建 .nuspec 文件的 powershell 脚本,其中包括执行这两项操作,以防其他人发现这有帮助:

    Param(
    [string]$pkgName,
    [string]$pkgVersion,
    [string]$basePath,
    [string]$branchForPackageName,
    [string]$contentFolder
    )
    if($pkgVersion -match '([0-9]{1,})\.([0-9]{1,})\.([0-9]{1,})\.{0,1}([0-9]{0,})$'){
        $matchedVersion = $Matches[0]
        $version=$matchedVersion
        $a=$version.Split(".")
        $version="{0:00}" -f ([int]$a[0]) + "." + "{0:00}" -f ([int]$a[1]) + "." + "{0:00}" -f ([int]$a[2]) + "." + "{0:00}" -f ([int]$a[3])
    
        $files=Get-ChildItem -Path $basePath\$contentFolder -Recurse
        Write-Host $files.Count " items in " $basePath\$contentFolder
        $baseName=$pkgName+".nuspec"
        $nuspecFile = Join-Path $basePath $baseName
        if((Test-Path $nuspecFile)){
            Remove-Item $nuspecFile
        }
        $title = $pkgName+"."+$branchForPackageName
        $description = (Get-Content -Path $basePath\$contentFolder\README.md)[1]
        if($description -eq ""){
            $description = $title+" Support DLL"
        }
        Add-Content $nuspecFile "<?xml version='1.0'?>"
        Add-Content $nuspecFile "<package >"
        Add-Content $nuspecFile "  <metadata>"
        Add-Content $nuspecFile "    <id>$title</id>"
        Add-Content $nuspecFile "    <version>$version</version>"
        Add-Content $nuspecFile "    <title>$title</title>"
        Add-Content $nuspecFile "    <authors>me</authors>"
        Add-Content $nuspecFile "    <owners>me</owners>"
        Add-Content $nuspecFile "    <requireLicenseAcceptance>false</requireLicenseAcceptance>"
        Add-Content $nuspecFile "    <description>$description</description>"
        Add-Content $nuspecFile "    <releaseNotes></releaseNotes>"
        Add-Content $nuspecFile "    <copyright>Copyright 2021</copyright>"
        Add-Content $nuspecFile "    <tags>$pkgName</tags>"
        Add-Content $nuspecFile "  </metadata>"
        Add-Content $nuspecFile "  <files>"
        for($n=0; $n -lt $files.Count; $n++){
            $fileName = $files[$n].FullName
            if(([IO.Path]::GetExtension($fileName) -ne "")){
                $fileName -match "\\$contentFolder\\(?<remainder>.*)"
                $targetFile = $matches['remainder']
                Add-Content $nuspecFile "    <file src=""$fileName"" target=""content\$pkgName\$targetFile"" />"
            }
        }
        Add-Content $nuspecFile "  </files>"
        Add-Content $nuspecFile "</package>"
    }
    

    【讨论】:

    • 太棒了!感谢您在这里分享您的解决方案,您可以Accept it as an Answer,这样它可以帮助遇到同样问题的其他社区成员,我们可以存档这个帖子,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2018-08-15
    • 2014-05-06
    相关资源
    最近更新 更多