如何从(未 checkout 的)远程仓库获取最后一个标签?
在我的本地副本上,我使用 describe
git describe --abbrev=0 --tags
describe带远程存储
最佳答案
TL; 博士
与 git ls-remote 您可以从远程存储库获取引用列表。
要查看最新版本,请查看以下输出的最后一行:
git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' <repository>
仅输出使用 Semantic Versioning 的存储库的最新标记(例如在 shell 脚本中)用:git -c 'versionsort.suffix=-' \
ls-remote --exit-code --refs --sort='version:refname' --tags <repository> '*.*.*' \
| tail --lines=1 \
| cut --delimiter='/' --fields=3
对于没有 --sort 的旧版 Git标志(v2.18 之前),或不支持的版本 versionsort.suffix (v2.4 之前)使用:git ls-remote --refs --tags <repository> \
| cut --delimiter='/' --fields=3 \
| tr '-' '~' \
| sort --version-sort \
| tail --lines=1
sort 的旧版本没有 --version-sort标志超出了这个问题的范围......--tags确保列表只包含标签引用。^{}在 refname 的末尾。 (有关更多信息,请参阅 this question elsewhere on StackOverflow 。)^{}的添加 --refs .--sort 对引用列表进行排序.git for-each-ref 相同的排序键。 .由于我们在本地没有所有信息,因此并非所有选项都可供我们使用(例如与日期相关的排序键)。version:refname key 。这也可以缩写为 v:refname .- :--sort='-v:refname' .v2.28.0-rc2 )放在他们应该放在前面的稳定版本之后。git -c 'versionsort.suffix=-' .versionsort.suffix像这样,它可以全局设置:git config --global 'versionsort.suffix' '-'
在 v2.4 和 v2.12 之间,标志被称为 versionsort.prereleaseSuffix .-排在空格前 但波浪号 ~在一个空格之后排序。-带波浪号 ~ ,事情按正确的顺序排序。这可以使用 tr '-' '~' 来完成tail --lines=1 .当然,如果按降序检索列表(使用 --sort='-v:refname' ),这将是: head --lines=1 .ada126bd28d66c8c8ff5966a52d63ce2c9e4d031 refs/tags/v2.28.0-rc0
为了只看到实际的标签(即引用名称),我们可以剪切该行的第一部分:cut --delimiter='/' --fields=3引用过滤器'*.*.*' .任何与该模式不匹配的内容都不会显示。v ,可以进一步缩小到'v*.*.*' .'v2.*' .*会给你带来麻烦!--exit-code旗帜。0 退出表明它成功地与远程存储库进行了对话。2当在远程存储库中找不到匹配的引用时。这是通过使用 --exit-code 来完成的。旗帜。--exit-code没有意义。git ls-remote --sort='version:refname' --tags https://github.com/git/git.git
这将返回一个按顺序排列所有标签的长列表,如下所示(为了理智而被截断)。 ...
4c8bcdda4d6e4757caf876ddc401b5392e874e21 refs/tags/v2.28.0
ada126bd28d66c8c8ff5966a52d63ce2c9e4d031 refs/tags/v2.28.0-rc0
bd42bbe1a46c0fe486fc33e82969275e27e4dc19 refs/tags/v2.28.0-rc0^{}
49bfe36405d1631a303992cac5cc408980a0454e refs/tags/v2.28.0-rc1
3ddac3d691c3633cd4d9a74c07e3b2301f546f77 refs/tags/v2.28.0-rc1^{}
84a0d5cc2107b83a791aa4034cc54874e1d50668 refs/tags/v2.28.0-rc2
b066807397fd55553f4910ede74839e319b661fd refs/tags/v2.28.0-rc2^{}
47ae905ffb98cc4d4fd90083da6bc8dab55d9ecc refs/tags/v2.28.0^{}
这告诉我们最新的标签是 v2.28.0 .versionsort.suffix全局,然后只获取最后一个标签:git config --global 'versionsort.suffix' '-'
git ls-remote --refs --sort=':refname' --tags https://github.com/git/git.git \
| tail --lines=1 | cut --delimiter='/' --fields=3
现在,让我们看看是否已经有 Git 的第 3 版!$ git ls-remote --exit-code --refs --tags https://github.com/git/git.git 'v3.*'
$ echo $?
2 # nope, not yet
关于git - 从远程仓库获取最后一个 git 标签,无需克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10649814/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c