【发布时间】:2016-06-30 19:50:00
【问题描述】:
我已经尝试了几种方法将 git 上的注释标签推送到由 gerrit 处理的存储库中。 创建 v0.1:
# git tag -a -m "message" v0.1
然后,当试图推动时......
# git push --tags ssh://<user>@<gerrit server>/<project>
它总是给我一个“锁定失败”的错误。
...
! [remote rejected] v0.1 -> v0.1 (failed to lock)
...
我已经配置了项目访问权限,将 Push Annotated Tag 添加到 refs/tags/* 参考中。
我还有什么遗漏的吗?
** 已编辑 - 添加来自 gerrit gc 和 git fsck 的结果:
$ ssh -p 29418 <user>@<server> gerrit gc <project> --show-progress
collecting garbage for "<project>":
Pack refs: 100% (13/13)
Counting objects: 78
Finding sources: 100% (78/78)
Getting sizes: 100% (37/37)
Writing objects: 100% (78/78)
Selecting commits: 100% (7/7)
Building bitmaps: 100% (7/7)
Finding sources: 100% (23/23)
Getting sizes: 100% (14/14)
Compressing objects: 100% (3094/3094)
Writing objects: 100% (23/23)
Prune loose objects also found in pack files: 100% (24/24)
Prune loose, unreferenced objects: 100% (24/24)
现在 git fsck:
$ git fsck --no-dangling
Checking object directories: 100% (256/256), done.
Checking objects: 100% (101/101), done.
一切似乎都很好... 但是,仍然无法将带注释的标签推送到 gerrit 中。
【问题讨论】:
-
嗨丹尼尔,显然你的存储库有问题......你可以尝试执行 Gerrit gc: ssh -p 29418
@ gerrit gc --show -progress,以及“git fsck”: cd $GERRIT_SITE/git/ .git; git fsck --no-dangling。让我知道这是否有帮助。 -
嗨,马塞洛!感谢您的帮助...不幸的是没有工作。我用 gerrit gc 和 git fsck 的结果编辑了这篇文章。
-
好的。另一种可能性:我认为您在服务器中有一个名为 v0.1/
的标签。我能够重现运行以下命令的“锁定失败”错误: git tag -a -m "Test" foo/boo; git push origin 标签 foo/boo;混帐标签-d foo/boo; git tag -a -m "测试" foo; git push 原始标签 foo。也许标签 v0.1/ 是错误创建的。 -
是的,已经创建了一个 v0.1 - 由于某种原因,我的本地存储库未与 gerrit 同步。我刚刚测试了通过不同的提交创建 v0.2,推送,并且能够从另一个本地存储库中提取新标签。但是每次我尝试推送时,第一个 repo 仍然抱怨错误。好吧......将删除这个并再次克隆,我想现在一切都应该没问题。再次感谢阿维拉!
-
太棒了!我发表我的评论作为您问题的答案。