You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GitPython==3.0.3创建轻量标签异常:生成了附注标签

解决GitPython创建轻量标签而非附注标签的问题

我明白你遇到的困扰了——用GitPython默认的create_tag方法总是生成附注标签,哪怕你明确想要轻量标签。这其实是因为GitPython的create_tag封装逻辑,或是结合你的Git配置,默认触发了附注标签的创建,不过我们有两种可靠的方式来生成预期的轻量标签:

方法1:显式指定参数确保轻量标签

GitPython的create_tag方法源码里明确:只有当messagetagger不为空时,才会创建附注标签。虽然你没传这两个参数,但显式设置它们为None可以彻底避免触发附注标签的逻辑。修改你的代码如下:

def tagpackage(context: Context) -> None:
    tag_name = context.version.getpreviewversion()
    logger.debug('Tag [{}] repo [{}] branch [{}]'.format(tag_name, context.args.git_repo, context.args.git_branch))
    logger.info('Creating the tag')
    # 显式指定message和tagger为None,强制生成轻量标签
    preview_tag = context.repo.create_tag(
        tag_name,
        ref=None,
        message=None,
        tagger=None
    )
    logger.info('Pushing tag')
    context.repo.remote('origin').push(preview_tag)

方法2:直接调用原生Git命令

如果第一种方法还是有问题,你可以绕开GitPython的封装,直接执行原生git tag命令——这和你在终端敲git tag <tag-name>的效果完全一致,肯定生成轻量标签:

def tagpackage(context: Context) -> None:
    tag_name = context.version.getpreviewversion()
    logger.debug('Tag [{}] repo [{}] branch [{}]'.format(tag_name, context.args.git_repo, context.args.git_branch))
    logger.info('Creating the tag')
    # 直接调用git原生命令创建轻量标签
    context.repo.git.tag(tag_name)
    logger.info('Pushing tag')
    # 推送标签到远程仓库
    context.repo.remote('origin').push(tag_name)

验证标签类型

你可以通过两种方式确认生成的是轻量标签:

  • 终端执行git show <tag-name>:如果直接显示对应commit的详细信息,就是轻量标签;如果显示tagger、标签消息等元数据,就是附注标签。
  • 在GitPython代码里检查:print(preview_tag.type),轻量标签的type值为commit,附注标签的type值为tag

另外,如果你的Git全局配置里设置了tag.annotate=true(会让默认git tag命令生成附注标签),那方法2是最可靠的选择,因为它完全遵循原生Git命令的行为。

内容的提问来源于stack exchange,提问作者MaxouMask

火山引擎 最新活动