我用来git ls-remote --tags <url>从存储库获取标签。但是,它不提供任何日期信息。所以我想知道是否有任何方法可以获取带有日期信息的标签,而无需克隆整个存储库。我已经检查了 git ls-remote文档,但找不到任何有用的信息。
我尝试过git ls-remote --tags https://github.com/shopify/sarama,我得到了:
2ed98903c79815c54f80ab06167a74755e74348c refs/tags/v1.0.0
3b6fa677e9395c3d7151999974d1b5b36f6ac091 refs/tags/v1.1.0
9bb4a68d57ff6f623363aa172f0a8297aa289ba7 refs/tags/v1.10.0
bd61cae2be85fa6ff40eb23dcdd24567967ac2ae refs/tags/v1.10.1
0fb560e5f7fbcaee2f75e3c34174320709f69944 refs/tags/v1.11.0
c01858abb625b73a3af51d0798e4ad42c8147093 refs/tags/v1.12.0
bbdbe644099b7fdc8327d5cc69c030945188b2e9 refs/tags/v1.13.0
240fd146ce68bcafb034cc5dc977229ffbafa8ea refs/tags/v1.14.0
3b1b38866a79f06deddf0487d5c27ba0697ccd65 refs/tags/v1.15.0
f7be6aa2bc7b2e38edf816b08b582782194a1c02 refs/tags/v1.16.0
35324cf48e33d8260e1c7c18854465a904ade249 refs/tags/v1.17.0
a6144ae922fd99dd0ea5046c8137acfb7fab0914 refs/tags/v1.18.0
ec843464b50d4c8b56403ec9d589cf41ea30e722 refs/tags/v1.19.0
fcf765a8b80c7b3a5ba1cb3bb9036261502b1ee8 refs/tags/v1.2.0
...
Run Code Online (Sandbox Code Playgroud)
显然,它们不是按日期排序的。任何人都可以解决这个问题吗?
根据下面 Vonc 的回答,我找到了一种获取按日期排序的标签信息的方法。首先,使用GraphQL Explorer,然后输入以下脚本:
query{
repository(name: "snappy", owner: "golang") {
refs(refPrefix: "refs/tags/", orderBy: {field: TAG_COMMIT_DATE, direction: DESC}, last: 100) {
nodes {
name
target {
__typename
... on Tag {
oid
name …Run Code Online (Sandbox Code Playgroud) 尝试设置semantic-release/gitlab,我在我的GitLab日志中得到了这个,
Error: Command failed with exit code 128: git tag v1.0.0 2c30602010d7d9f26cc0880b988ff9de6405daa5
fatal: tag 'v1.0.0' already exists
at makeError (/builds/myProject/angular-validators/node_modules/semantic-release/node_modules/execa/lib/error.js:60:11)
at handlePromise (/builds/myProject/angular-validators/node_modules/semantic-release/node_modules/execa/index.js:118:26)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async tag (/builds/myProject/angular-validators/node_modules/semantic-release/lib/git.js:224:3)
at async run (/builds/myProject/angular-validators/node_modules/semantic-release/index.js:191:5)
at async module.exports (/builds/myProject/angular-validators/node_modules/semantic-release/index.js:260:22)
at async module.exports (/builds/myProject/angular-validators/node_modules/semantic-release/cli.js:55:5) {
shortMessage: 'Command failed with exit code 128: git tag v1.0.0 2c30602010d7d9f26cc0880b988ff9de6405daa5',
command: 'git tag v1.0.0 2c30602010d7d9f26cc0880b988ff9de6405daa5',
Run Code Online (Sandbox Code Playgroud)
但是当我在 GitLab 上查看我的项目时,
https://gitlab/myGroup/myProject/-/tags
Run Code Online (Sandbox Code Playgroud)
它没有显示任何标签。当我查看管道的输出时,我看到
Getting source from Git repository
Fetching changes with git depth set to 50...
Reinitialized …Run Code Online (Sandbox Code Playgroud) 我有一个名为latest的标签,我希望它成为一个分支.与此相反.我也需要将它从远程仓库中删除.
背景:对于许多golang软件包来说,这是一个问题,goinstall会查找发布标记或分支,这与该语言的最新官方版本相对应.当他们应该使用git 分支时,很多人错误地使用git 标签,类似于其他VCS .
即使在阅读文档后,我对git标记感到有点困惑.
说我正在改变我的develop分支.
我应该在进行更改之前创建标记,还是应该在进行更改后添加标记?哪个工作流程更好?
最初我被要求使用git push --tags,但在运行后git tag我显示了5个标签的列表(release-1,...,release-5),当我尝试运行时,git tag -v release-5我被提示有以下错误,同样适用于其他版本.有任何想法吗?
error: 575bbe56b0c021c51e2b819763c1ff15cc5d2186: cannot verify a non-tag object of type commit.
error: could not verify the tag 'release-5'
Run Code Online (Sandbox Code Playgroud)如果我曾经git push在Develop分支中推送标签,然后合并到Master分支,我还需要做另一轮git push --tags
标签与分支有何不同?哪个更好?
我希望能够锁定GIT标记,以便无法移动或删除它以进行产品发布控制.我认为我可以使用基于文档的轻量级标记执行此操作,但通过实验发现轻量级标记也可以移动.
我希望做一个差异就像这一个。
唯一的区别是我不想“手动”通知标签名称,我希望它们由 git 命令检索。
我知道这会git describe --tags返回我的最新标签。但是上一个呢?如何获得?
基本上我想要的是:
$ git diff $(git_command_to_get_previous_tag) $(git describe --tags)
Run Code Online (Sandbox Code Playgroud)
我不想要的:
$ git diff 1.0 2.0
Run Code Online (Sandbox Code Playgroud) 我知道我可以去 github.com,选择我的标签,然后点击删除,但这只会删除标签信息,而不是实际的标签。那么如何永久删除呢?!
有没有办法找出标签是孩子还是父母(不是直接孩子或父母)?
想象一下以下 git 历史:
a467066 - (tag: child-2, master) feature 4
2028351 - (tag: child-1) feature 3
a7a6364 - (HEAD) feature 2
3772445 - (tag: parent-1) feature 1
5a01bfa - (tag: parent-2) initial commit
Run Code Online (Sandbox Code Playgroud)
我HEAD在中间变更集(“功能 2”),我想知道标签是否是当前变更集的任何子项。因此,对于child-1和child-2我想true,检查标签parent-1,parent-2或任何not-existing会返回false。
我有一个包含三个注释标签本地的Git仓库:v0.1.0,v0.1.1,和v0.1.2.
当我使用gitk(Repository→Visualize master的历史记录)查看项目的历史记录时,我可以看到每个标记分配给正确的提交.
但是,当我尝试在Git GUI(分支→结帐...→标签)中签出我的标签时,标签v0.1.1不会出现.
当我去检查gitk中的每个标签时,我注意到标签的细节略有不同.详细信息v0.1.0并将v0.1.2其列为type commit,而标记v0.1.1列为type tag.
值得注意的是,我在这个标签上重写了历史.为了修复我的标签描述中的拼写错误,我使用了编辑标签消息git tag <tag name> <tag name> -f -m "<new message>".
v0.1.1在使用Git GUI结账时,为什么我看不到我的标签?它为什么显示为type tag?
要从 获取最新提交branchName,我们运行以下代码:
treeMapData = git(branch: branchName, credentialsId: credential, url: "${gitLabServer}/${projectName}/${repo}.git")
Run Code Online (Sandbox Code Playgroud)
根据我们的工作流程,确保每次提交有一个标签
我们想要构建代码,只有当提交被标记时。
如何检索最新提交的标签名称?