热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何更改Git标签的Tagger名称和电子邮件

如何解决《如何更改Git标签的Tagger名称和电子邮件》经验,为你挑选了1个好方法。

长话短说,我正在编写一个脚本,将一个非常大的项目从(gasp)Microsoft SourceSafe迁移到Git,并且我试图保留SourceSafe项目标签的作者(这些标签实际上是Git中的标签)。我知道您可以修改Git提交的作者和提交者名称/日期,但是您可以对Git标签做同样的事情吗?



1> torek..:

TL; DR

用新的所需数据重新创建标签。但是如果其他人以前有过,他们可能不会接受您的新朋友。否则他们可能会!不过,这取决于他们

描述

我知道您可以修改Git提交的作者和提交者名称/日期

实际上,您不能这样做,而您不能(以及可以做什么)这一事实在其余答案中起着重要作用。

所有Git对象都有一个哈希ID作为其“真实名称”。哈希是通过计算对象内容的加密校验和形成的。这意味着您根本无法更改任何Git对象。1可以做的是构造一个对象,然后说服拥有旧对象的每个人停止使用它,而改用新对象。

这是做什么的git commit --amend(以及各种交互式变基选项喜欢edit并且reword可以做的事情)。首先,我们将原始的Git对象提取到普通数据中,以便在其中进行操作;然后我们进行操作,并要求Git构造一个新对象;最后我们停止使用旧对象,而开始使用新对象。

对于属于尖端提交的提交(请参阅gitglossary中的head的定义),只要我们还没有推送该提交,所有这些操作都非常容易且顺利进行。没有额外的提交引用此技巧提交,因此我们进行“同样好” 的新提交,将分支名称(head)重定向到新提交,而忘记我们刚刚替换的原始提交。它看起来像我们改变了提交,但我们得到了一个新的哈希ID代替。

这如何应用于标签

Git有两种标签,轻量级标签和带注释的标签。它们之间的区别在于,带注释的标签由指向标签对象的轻量级标签组成。具有标记信息的标记对象。(轻量级标签没有其自身的此类信息,它仅直接指向提交对象。)

因此,要“更改”标记对象,我们必须做与“更改”提交对象相同的操作:将其复制到新的标记对象。

没有内置命令可以执行此操作,但是很容易构建一个命令,git cat-file -p这可以使您将原始标签提取到普通数据中git mktag,而,您可以将普通数据转换为新标签对象。例如,v2.2.1Git的Git存储库中的标签开头为:

$ git cat-file -p v2.2.1
object 9b7cbb315923e61bb0c4297c701089f30e116750
type commit
tag v2.2.1
tagger Junio C Hamano <...

object行是标记指向的提交:

$ git cat-file -t 9b7cbb315923e61bb0c4297c701089f30e116750
commit

因此我们可以将此标签复制到另一个标签中tagger

$ new_hash_id=$(git cat-file -p v2.2.1 | sed -e .... | git mktag)
$ git update-ref refs/tags/$name $new_hash_id

其中sed做任何必要的操作(请参见下文),并且$name是标签的名称。然后,我们将使轻量级标签v2.2.1指向中的新标签对象$new_hash_id。但是有两个问题(只有一个可能适用于您的情况)。

标签可能是PGP签名的

上面的标签继续说:

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

然后有一个PGP签名。该签名涵盖签名本身以外的所有数据。如果您复制和修改此标签,则应完全放弃原始签名(该签名无效,并且将无法通过任何测试);是否可以并且应该将其替换为新签名,如果是,则由谁决定。

标签不应更改其目标对象

现有的轻量级标签v2.2.1当前指向现有的标签对象:

$ git rev-parse v2.2.1
7c56b20857837de401f79db236651a1bd886fbbb

这是到目前为止我们一直在查看的数据。

标签对象将有一些其他的,不同的哈希ID。当我们修改一个未发布的提交时,这没什么大不了的,因为没有其他人知道将某个分支名称映射到某个特定的哈希ID。

但是,标签通常是“众所周知的”。实际上,标签(尤其是PGP签名的带注释的标签,PGP签名使您可以验证没有人跟踪标签数据)的目的是确保您可以确保此标签是正确的标签,并且它指向的提交对象是原始提交,而不是某些特洛伊木马。如果更改现有标签,那么您正在颠覆此意图。此外,有些人谁知道前面的标签的值将简单地拒绝接受新的价值:你不会是能够让他们更新现有的标签。但是,只要您其他人没有标签之前就这样做,他们将永远不会知道,您会很好的。


1或者,除非您可以破坏哈希值,否则您无法更改Git对象的内容。另请参阅新发现的sha1碰撞如何影响git?


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • IssuesonGithubaremeantforbugreporting.Pleasepostfeaturerequestsonthe ... [详细]
  • TerraformVersionTerraformv0.10.6AffectedResource(s)Pleas ... [详细]
  • ThisisthecontinuedworkfromPR#2064takingincommentsfromhttps://do ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Carve库在Visual Studio2015中的编译方法及注意事项
    本文介绍了在Visual Studio2015中编译Carve库的方法及注意事项。首先下载Carve库,并使用Visual Studio2015打开,生成后在bin目录下会生成.lib文件。同时,本文还指出了之前在Visual Studio2017中编译的问题,并提醒需要根据对应的平台进行编译,否则会出现报错。详细的步骤和注意事项请参考原文链接。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 修正我的GitHub commit 数据
    早晨上班,滴滴搭车里,我在掘金这个帖子看到大家晒自己的Github活跃记录,我也晒了下自己的记录。不过太少了。有遗漏的commits状况这也让我知道,自己觉得自己很忙的,实际上提交 ... [详细]
  • SQL Server中TempDB管理(version store的逻辑 ... [详细]
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
  • 前言本篇为大家总结社区多人合作常见的场景和对应的git操作命令。本篇非新手教程,阅读本篇前需具备Git基础知识。Git入门教程请参考https://www ... [详细]
author-avatar
阿思翠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有