--sort=<type>
Sort in a specific order. Supported type is "refname
(lexicographic order), "version:refname" or "v:refname"
(tag names are treated as versions). Prepend "-" to reverse
sort order. When this option is not given, the sort order
defaults to the value configured for the tag.sort variable
if it exists, or lexicographic order otherwise. See
git config(1).
version_sort() {
# read stdin, sort by version number descending, and write stdout
# assumes X.Y.Z version numbers
# this will sort tags like pr-3001, pr-3002 to the END of the list
# and tags like 2.1.4 BEFORE 2.1.4-gitsha
sort -s -t- -k 2,2nr | sort -t. -s -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr
}
5条答案
按热度按时间6g8kf2rb1#
您可以使用
git tag
的其他特性来获取与模式匹配的标记列表,并按照版本标记顺序正确排序(通常没有前导零):从
$ man git-tag
开始:7vhp5slm2#
您可以从http://rudix.org/packages/index.html下载coreUtils
它包含
gnusort
,支持sort -V
sintaxjm2pwxwz3#
为了解释为什么会这样,考虑第一个
sed
命令本身,输入versions.txt,第一个sed
命令在一位数版本号前面加一个前导零,生成:以上可以正常排序,之后就是去掉添加的字符,在完整命令中,最后一个
sed
命令去掉前导零,得到最终输出:只要版本号为99或更小,命令就能正常工作。如果版本号大于99但小于1000,命令只会稍微复杂一些:
由于我没有Mac电脑,上面的测试是在Linux上进行的。
更新:Jonathan Leffler在评论中说,尽管Mac regex文档中有单词边界(
\b
),但Macsed
似乎无法识别它,他建议将第一个sed
替换为:因此,完整命令可能是:
这可以处理高达99的版本号。
pw136qt24#
安装在OS X上的标准排序可以使用分隔符按字段排序,所以你可以对版本号和任何后缀进行排序。
这将首先按后缀排序,然后按X.Y.Z部分
sort -s -t- -k 2,2n | sort -t. -s -k 1,1n -k 2,2n -k 3,3n -k 4,4n
排序,还可以对git describe --tags
命令中的-N-g格式版本号排序上面的-3-g83 e21 c5是后缀的示例,
git describe --tags
命令将自动附加到最新的标记,以表示自标记(3)以来的提交次数,以及最近提交的Git SHA哈希(83 e21 c5)要将排序反转为降序,请执行以下操作:
sort -s -t- -k 2,2nr | sort -t. -s -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr
也可以在其周围定义一个shell函数。
或者把它写进一个名为version-sort的小文件中,然后放到你的PATH中的某个目录下。
11dmarpk5#
第一个月
如果安装了corutils,您的Mac上应该有gsort
gsort --version