Итак, у меня есть список версий, который выглядит следующим образом:
v1.1.0
v1.2.0
v1.3.0
v1.4.0
v1.5.0
v1.7.0
v1.8.0
v1.9.0
v2.0.0
v2.1.0
v2.10.0
v2.11.0
v2.12.0
v2.2.0
v2.3.0
v2.4.0
v2.5.0
v2.6.0
v2.7.0
v2.8.0
v2.9.0
Проблема в том, что они упорядочены неправильно.Я новичок в Powershell, поэтому у меня возникли некоторые проблемы, пытаясь их отсортировать.Я пытался сделать это:
$tags = git tag
$versions = $tags | %{ new-object System.Version ($_) } | sort
Но я получаю эту ошибку:
new-object: исключение вызывает ".ctor" с аргументом "1": "Часть строки версии была слишком короткой или слишком длинной. "В строке: 1 символ: 24 + $ версии = $ теги |% {new-object System.Version ($ _)} |sort + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [New-Object], MethodInvocationException + FullyQualifiedErrorId:ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand
Может ли кто-нибудь помочь?
Обновление
Я использовал одно из решений, которое выглядит следующим образом:
$location = Get-Location
$path = $location.tostring() + "\CHANGELOG.md"
$tags = git tag
$i = 0
Clear-Content $path
Add-Content $path "Change Log"
Add-Content $path "=========="
Add-Content $path " "
$ToNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }
$tags | Sort-Object $ToNatural
foreach($tag in $tags)
{
if (-NOT ($tag -match "v(\d+\.)(\d+\.)(\*|\d+)")) { continue }
$i = $i + 1
if ($i -eq 0) { continue }
$tag
If ($i -gt 0) {
$previous = $tags[$i - 1]
Add-Content $path " "
}
}
Этот вид работает, но все теги, похоже, записаны в консоль, и это показывает следующее:
1.6.0
changeDeliveryFieldAccess
orders/autoComplete
returns/autoComplete
save-lines-dates
services/serviceDetails
tile-colours
users/confirmation
v0.1
v1.1.0
v1.2.0
v1.3.0
v1.4.0
v1.5.0
v1.7.0
v1.8.0
v1.9.0
v2.0.0
v2.1.0
v2.2.0
v2.3.0
v2.4.0
v2.5.0
v2.6.0
v2.7.0
v2.8.0
v2.9.0
v2.10.0
v2.11.0
v2.12.0
v.2.7.1
Как вы можете видеть, есть некоторые, которые я надеваюне хочуВ частности:
1.6.0
changeDeliveryFieldAccess
orders/autoComplete
returns/autoComplete
save-lines-dates
services/serviceDetails
tile-colours
users/confirmation
v.2.7.1
Как только они будут удалены из моего списка, порядок будет правильным:)
Обновление 2
Итак, я попробовал другойНадеемся, что это лучшее решение:
$ location = Get-Location $ path = $ location.tostring () + "\ CHANGELOG.md" $ tags = тег git $ i = 0
Clear-Content $path
Add-Content $path "#Change Log"
Add-Content $path "=========="
Add-Content $path " "
$tags |
Where-Object { $_.Substring(1) -as [version] } |
Sort-Object { [version] $_.Substring(1) }
foreach($tag in $tags) {
write-host "$($tag) is ok"
}
Я не уверен, правильно ли я это делаю, но это вывод из приведенного выше кода:
1.6.0 is ok
changeDeliveryFieldAccess is ok
orders/autoComplete is ok
returns/autoComplete is ok
save-lines-dates is ok
services/serviceDetails is ok
tile-colours is ok
users/confirmation is ok
v.2.7.1 is ok
v0.1 is ok
v1.1.0 is ok
v1.2.0 is ok
v1.3.0 is ok
v1.4.0 is ok
v1.5.0 is ok
v1.7.0 is ok
v1.8.0 is ok
v1.9.0 is ok
v2.0.0 is ok
v2.1.0 is ok
v2.10.0 is ok
v2.11.0 is ok
v2.12.0 is ok
v2.2.0 is ok
v2.3.0 is ok
v2.4.0 is ok
v2.5.0 is ok
v2.6.0 is ok
v2.7.0 is ok
v2.8.0 is ok
v2.9.0 is ok