在github上交换“最新版本”

时间:2014-04-02 20:40:44

标签: git github

我有repository on a github

这是图表: enter image description here

这是我的行动顺序:

  1. 进行5次提交并推送

  2. 添加标签 v0.2.0 git tag -a v0.2.0 -m "release 0.2.0"

  3. 推送代码(git push --tags origin master

  4. 通过github网站上的草稿新版本按钮发布。我选择了 v0.2.0 标记并获得https://github.com/n1k1ch/PrototypeGit/releases/tag/v0.2.0

  5. 将标记添加到上一次提交(git tag -a v0.1.0 b217332279 -m "release 0.1.0"

  6. 推送代码(git push --tags origin master

  7. 通过使用 v0.1.0 标记草拟新版本并获得https://github.com/n1k1ch/PrototypeGit/releases/tag/v0.1.0

  8. 因此, v0.1.0 标记变为 最新版本

    问题:

    我能否将 v0.1.0 版本与 v0.2.0 版本交换为 v0.2.0 成为 最新发布


    P.S。 googling "github swap release"没有帮助


    编辑:

    感谢@Chris,我做到了。一个小小的注释 - 在我使用的Windows上:

    SET GIT_COMMITTER_DATE="2014-04-02 23:00"
    git tag -a v0.1.0 b217332279 -m "release 0.1.0"
    git push --tags origin master
    

    如果有人感兴趣,在此之后我会看到以下内容: tag v0.1.0 re-timed

    我打开 v0.1.0 并按发布发布 结果是: latest release "swapped"


    我也收到了来自support@github.com的答案:

      

    这是预期的行为。我们将按照您的v0.1.0的日期进行操作   发布,而不是上次提交的日期。这是一篇很好的博客文章   关于更改带注释标签的日期:   http://sartak.org/2011/01/replace-a-lightweight-git-tag-with-an-annotated-tag.html

2 个答案:

答案 0 :(得分:16)

我不知道有什么办法直接在GitHub中这样做。 “最新版本”是根据标签上的时间戳确定的,而不是根据其名称的语义确定的。

过去我通过删除有问题的旧标签解决了我个人项目中的这个问题:

git tag -d v0.1.0
git push --delete origin v0.1.0

并使用假日期重新创建它:

GIT_COMMITTER_DATE="2013-12-31 00:00" git tag -a v0.1.0.1 b217332279 -m "release 0.1.0.1"
git push --tags origin master

the manpage for git-tag中记录了这一点:

  

关于回溯标签

     

如果您从其他VCS导入了一些更改,并且想为工作的主要版本添加标记,那么能够指定嵌入标记对象内部的日期是很有用的。例如,标签对象中的此类数据会影响gitweb界面中标签的排序。

     

要设置将来标记对象中使用的日期,请设置环境变量GIT_COMMITTER_DATE(请参阅后面对可能值的讨论;最常见的形式是“YYYY-MM-DD HH:MM”)。

     

例如:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

请注意,同一手册页强烈建议反对重复使用相同的标记名称:

  

重新标记

     

当您标记错误的提交并且想要重新标记时,您应该怎么做?

     

如果您从未推过任何东西,只需重新标记即可。使用“-f”替换旧的。你已经完成了。

     

但是如果你把事情搞砸了(或者其他人可以直接读取你的存储库),那么其他人就已经看到了旧的标签。在这种情况下,您可以执行以下两项操作之一:

     
      
  1. 理智的事情。只是承认你搞砸了,并使用不同的名字。其他人已经看过一个标签名称,如果你保持相同的名称,你可能会遇到两个人都有“版本X”的情况,但他们实际上有不同的“X”。所以只需称它为“X.1”并完成它。

  2.   
  3. 疯狂的事。你真的想把新版本称为“X”,即使其他人已经看过旧版本。所以只需使用git tag -f again,就像您尚未发布旧版本一样。

  4.         

    然而,Git (并且它不应该)更改用户背后的标签。因此,如果有人已经获得了旧标记,那么在树上执行git pull不应该只覆盖旧标记。

         

    如果某人有你的发布标签,你不能只是通过更新自己的标签来更改标签。这是一个很大的安全问题,因为人们必须能够信任他们的标签名称。如果你真的想做疯狂的事情,你需要了解它,告诉别人你搞砸了。你可以通过公开声明来说明这一点:

         
        

    好吧,我搞砸了,我推出了一个标记为X的早期版本。我     然后修复了一些东西,并再次将 fixed 树重新标记为X.

             

    如果您输入了错误标签,并想要新标签,请删除     旧的,并通过执行以下操作获取新的:

    git tag -d X  
    git fetch origin tag X
    
             

    获取我更新的标签。

             

    您可以通过

    测试您拥有的标签
    git rev-parse X
    
             

    如果您有新版本,则应返回0123456789abcdef。

             

    很抱歉给您带来不便。

      
         

    这看起来有点复杂吗? 应该。没有办法自动“修复”它是正确的。人们需要知道他们的标签可能已被更改。

如果您的项目相对孤立,我只会重复使用相同的标记,并且您可以可靠地联系可能正在使用该代码的所有人。

有关删除远程标记的更多详细信息,请查看this question

答案 1 :(得分:0)

除了Chris的回答外,请注意,如果您按他提到的那样重新发布标签,但是随后您在GitHub上编辑了说明,这将使其再次成为最新标签。