【问题标题】:How can we force git to always add tags as annotated我们如何强制 git 总是将标签添加为注解
【发布时间】:2014-04-26 17:02:34
【问题描述】:

我需要强制每个新标签都是注释标签。我需要强迫每个用户使用它而不告诉他们做一些特别的事情。我尝试将标签的别名设为“tag -a -m ''”,但它不起作用。

【问题讨论】:

  • 我想知道这是否可以通过服务器上的 git pre-receive 钩子实现......
  • 这是可能的,但我不确定将轻量级标签转换为带注释的标签会有多好。我在下面的建议可以在开发人员框/客户端上完成以提供帮助,但即使我也在寻找这方面的建议。在此期间出现的有趣的事情是,您如何真正区分轻量级标签和带注释的标签。如果他查看它可以区分它,但我如何从 git 本身或以编程方式知道它(除非不涉及丑陋的黑客攻击)。

标签: git


【解决方案1】:

git 不会让您为每个用户强制执行某些策略 - 例如,为克隆您的存储库的每个人提供全局别名或默认标志。

它将让您做的是对您管理的某些特定存储库执行一些策略。您可以使用hook 来拒绝任何包含未注释标签的推送,而不是让每个人都自动添加这些标志。

我真的不知道你如何判断标签是否被注释,但this answer 可能会帮助你开始使用它们。

【讨论】:

    【解决方案2】:

    你可以试试这个技巧。让每个 git 命令通过一个 shell 脚本,该脚本将查找针对 git 触发的命令。如果是“tag”命令,将每个轻量级标签都变成一个带注释的标签。如果命令不是“标记”,则让正常操作继续进行。以下代码可能会对您有所帮助。

     #!/bin/bash
    
        git_command=$1
    
        if [ "${git_command}" == "tag" ]; then
           echo "User is trying to tag"
           if [ "$2" != "-a" ] && [ "$2" != "-m" ]
           then
              echo lightweight
              echo "Second option is not -a nor -m.So looks like user is trying to create a lighweight tag."
              tag_message=$2
              git tag -a ${tag_message} -m ""
           else
              git tag $2 $3 $4 $5
              echo "Second option is either -a or -m. So may be user is trying to create an annotated tag."
           fi
        else
          echo "User is not tagging. So continue with the git operation user requested."
        fi
    

    【讨论】:

      【解决方案3】:

      在 .gitconfig 中,您可以使用不同的名称创建别名:

      [alias]
          atag = tag -a -m ""
      

      然后git atag 创建一个带注释的标签。不是很优雅,但比每次都必须通过 -m 更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 2016-06-26
        • 1970-01-01
        • 2023-02-09
        • 2021-12-12
        相关资源
        最近更新 更多