如何通过版本string的formssorting的git标签forms为rc-XYZW?
当我input命令时:
git tag -l 我得到这样的结果:
 rc-0.9.0.0 rc-0.9.0.1 rc-0.9.0.10 rc-0.9.0.11 rc-0.9.0.12 rc-0.9.0.2 rc-0.9.0.3 rc-0.9.0.4 rc-0.9.0.5 rc-0.9.0.6 rc-0.9.0.7 rc-0.9.0.8 rc-0.9.0.9 
而不是我想要的:
 rc-0.9.0.0 rc-0.9.0.1 rc-0.9.0.2 rc-0.9.0.3 rc-0.9.0.4 rc-0.9.0.5 rc-0.9.0.6 rc-0.9.0.7 rc-0.9.0.8 rc-0.9.0.9 rc-0.9.0.10 rc-0.9.0.11 rc-0.9.0.12 
如何sorting当前列表来获得这样的结果?
使用版本sorting
 git tag -l | sort -V 
或者git版本> = 2.0
 git tag -l --sort=v:refname git tag -l --sort=-v:refname # reverse 
使用Git 2.0(2014年6月),您将能够指定sorting顺序!
 参见NguyễnTháiNgọcDuy( pclouds )撰写的commit 9ef176b中的 commit b6de0c6 : 
  --sort=<type> 
按特定顺序sorting 。
支持的types是:
- “
refname”(词典顺序),- “
version:refname”或“v:refname”(标签名称被视为版本)。用“
-”来sortingsorting。
所以,如果你有:
 git tag foo1.3 && git tag foo1.6 && git tag foo1.10 
这是你会得到什么:
 # lexical sort git tag -l --sort=refname "foo*" foo1.10 foo1.3 foo1.6 # version sort git tag -l --sort=version:refname "foo*" foo1.3 foo1.6 foo1.10 # reverse version sort git tag -l --sort=-version:refname "foo*" foo1.10 foo1.6 foo1.3 # reverse lexical sort git tag -l --sort=-refname "foo*" foo1.6 foo1.3 foo1.10 
自从提交b150794 (由Jacob Keller,git 2.1.0,2014年8月)以来,您可以指定默认顺序:
 tag.sort 
这个variables控制
git-tag显示标签时的sorting顺序。
如果没有提供“--sort=<value>”选项,这个variables的值将被用作默认值。
最牛的 评论 :
版本sorting顺序现在可以(Git 2.1+)configuration为默认值:
 git config --global tag.sort version:refname 
 使用Git 2.4(Q2 2015) , 可以使用versionsort.prereleaseconfigurationvariables来指定v1.0-pre1在v1.0之前 。 
 见Junio C gitster ( gitster )的 提交f57610a 。 
  注意(见下文) versionsort.prereleaseSuffix现在是(2017)一个不推荐使用的别名。 
  git 2.7.1(2016年2月)将改善git tag本身的输出。 
 请参阅提交0571979 (2016年1月26日),并提交 Jeff King( peff ) 提供的1d094db (2016年1月24日) 。 
  (合并由Junio C gitster – gitster -在提交8bad3de ,2016年2月1日) 
tag:不要将不明确的标签名称显示为“tags/foo”由于b7cc53e (
tag.c:使用'ref-filtertag.c,2015-07-11),git tag已经开始显示带有不明确名称的标签(即,当“heads/foo”和“tags/foo”同时存在) “tags/foo”而不是“foo”。
这是两个:
- 无意义; “
git tag”的输出只包含refs/tags,所以我们知道“foo”是指“refs/tags”中的那个。- 暧昧 在原始输出中,我们知道行“
foo”意味着“refs/tags/foo”存在。 在新的输出中,我们不清楚“refs/tags/foo”还是“refs/tags/tags/foo”。发生这种情况的原因是提交b7cc53e切换
git tag使用ref-filter的“%(refname:short)”输出格式,这是从for-each-ref改编的。 这个更通用的代码并不知道我们只关心标签,并使用shorten_unambiguous_ref来获取short-name。
我们需要告诉它,我们只关心“refs/tags/”,它应该缩短这个价值。让我们添加一个新的修饰符到格式化语言“
strip”,以删除一组特定的前缀组件。
这修正了“git tag”,并允许用户从自己的自定义格式(“tag”或“for-each-ref”)调用相同的行为,同时在所有地方留下“:short”具有相同的一致含义。如果添加
strip=<N>,则从refname的前面(例如,%(refname:strip=2)将<N>斜杠分隔的path组件转换为foo将refs/tags/foofoo。
<N>必须是一个正整数。
如果显示的ref比<N>具有更less的组件,则该命令将中止并出错。
 对于git tag ,当未指定时,默认为%(refname:strip=2) 。 
更新Git 2.12(2017年第1季度)
 请参阅SZEDERGábor ( szeder) 提交c026557 , 提交b178464 , 提交51acfa9 , 提交b823166 , 提交109064a , 提交0c1b487 , 提交9ffda48 , 提交eba286e (2016年12月8日) 。 
  (由Junio C gitster合并- gitster – in commit 1ac244d ,2017年1月23日) 
  versionsort.prereleaseSuffix是versionort.suffix的不推荐使用的别名。 
在“
git tag -l”中使用的版本比较的prereleaseSuffixfunction在相同版本的两个或多个预发行版本不存在的情况下不正确(例如,2.0-beta1和2.0-beta2存在且代码需要比较2.0-beta1和2.0-beta2)。
 根据这个答案 ,在不支持像Windows和OSX那样sort -V平台上,你可以使用 
 git tag -l | sort -n -t. -k1,1 -k2,2 -k3,3 -k4,4 
 调整这个perl脚本 ,将看起来像client_release/7.2/7.2.25标签client_release/7.2/7.2.25到特定的标签scheme。 
我写了一个简单的shell脚本来简化这个任务。
 #!/usr/bin/env bash TAGS=$(git tag) CODE=$? if [ $CODE = 0 ]; then echo "$TAGS" | sort -V fi exit $CODE 
 我将其保存为$PATH git-tags ,并在需要列出标签时运行git tags标签。 
 要使用sort -V方法进行反向sorting: 
 git tag -l | sort -V --reverse