使用filter-branch或类似工具在git中更新带注释/签名标签的作者信息

时间:2014-05-29 00:37:35

标签: git

是否有更好的方法来更新作者电子邮件和整个git存储库的带注释或签名标签的名称?对于提交,我使用git filter-branch和以下脚本

#!/bin/bash
if [ "$GIT_AUTHOR_EMAIL" = "you@example.com" ];
then
    GIT_AUTHOR_NAME="My Name";
    GIT_AUTHOR_EMAIL="addy@example.com";
    git commit-tree "$@";
else
    git commit-tree "$@";
fi

和命令

git filter-branch -f \
--tag-name-filter cat \
--commit-filter '/some/path/update_email.sh $@' master

现在,使用--tag-name-filter cat标志,所有标记都会更新为新提交,但它们包含旧的作者信息。我想要一种自动更新此联系信息的方法。更具体地说,我知道--tag-name-filter剥离了GPG签名。如果有办法更新签名,那将是理想的。在这种情况下,假设我拥有正在更新的签名的GPG密钥。

1 个答案:

答案 0 :(得分:0)

您的命令似乎与this blog post类似,后者提到:

git filter-branch --commit-filter '/path/to/authors.py "$@"' \
  --tag-name-filter cat -- --all

但是,一旦完成该过滤器,它也会删除原始引用:

git for-each-ref --format="%(refname)" refs/original/ \ 
  | xargs -n 1 git update-ref -d

也许这是你案件中缺失的一步。

另请参阅BFG之类的工具是否无法在一个命令中处理这两个步骤。