如果你这样做:git describe --long
你得到:0.3.1-15-g3b885c5
这就是上述字符串的含义:
Tag-CommitDistance-CommitId(http://git-scm.com/docs/git-describe)
如何拆分字符串以获取第一个(Tag)和最后一个(CommitId)元素?
答案 0 :(得分:10)
通过将String.split()
与count参数一起使用来管理commitid中的破折号:
$x = "0.3.1-15-g3b885c5"
$tag = $x.split("-",3)[0]
$commitid = $x.split("-",3)[-1]
答案 1 :(得分:4)
注意:此答案的重点是改进Ocaso Protal's helpful answer的通过-
划分令牌的方法。
但是,该方法并不完全可靠,因为git
标签名称本身可能包含-
个字符,因此您不能盲目地认为第一个-
实例结束完整的标签名称。
为了解决这个问题,请改用Richard's robust solution。
仅提供一个PowerShell惯用的变体:
$tag, $commitId = ('0.3.1-15-g3b885c5' -split '-')[0, -1]
PowerShell的-split
operator用于通过分隔符-
将输入字符串拆分为令牌数组。
尽管[string]
类型的.Split()
方法在这里就足够了,-split
offers many advantages in general。
[0, -1]
从0
返回的数组中提取第一个(-1
)和最后一个(-split
)元素,并将其作为2元素数组返回
$tag, $commitId =
是一种解构赋值,它将所得的2元素数组的元素分别分配给变量。
答案 2 :(得分:2)
我不记得标签中是否允许使用破折号,所以我会假设它们是,但不会出现在最后两个字段中。
因此:
if ("0.3.1-15-g3b885c5" -match '(.*)-\d+-([^-]+)') {
$tag = $Matches[1];
$commitId = $Matches[2]
}