在多个过滤的提交中更改作者

时间:2019-08-23 19:38:32

标签: git svn visual-sourcesafe

我只是将旧存储库(SVN和VSS)转换为Git,其中有许多我想纠正的错误信息。在某些时间段内,我有错误的作者/提交者,因为相同的用户已经使用2次登录,并且在这里使用了同事的登录。

我将git filter与--after选项一起使用以查找相应的提交ID,现在有了一个文本文件,其中的提交ID必须逐行存储,其中仅作者需要替换。

我现在尝试使用

git commit --amend --author="<my new author>" --no-edit <commit hash>

现在要替换各自的提交,但是我总是在这里收到一条消息

did not match any file(s) known to git

据我了解,我首先必须签出提交,然后对其进行更改,然后对其重新设置基础。只有这样,所有过滤的提交ID才会更改。

我需要一个解决方案,其中遍历文本文件的每一行,然后为每个ID设置作者并在最后进行变基:

for i in $(cat /tmp/commitids.txt); do 
    <I dont know the correct git command to replace the author of the commit in $1> 
done; 
<I don't know the correct rebase command for all the changes>

1 个答案:

答案 0 :(得分:1)

您想要过滤分支,它为您处理id重写,您只需提供内容和元数据更改即可。在您的情况下,假设您的commitids文件是制表符分隔的哈希码,作者姓名,作者电子邮件,它将非常接近(键盘到文本框警告)

git filter-branch --setup '
        declare -A authors; while read id auth; do authors[$id]=$auth; done <commitids
    ' --env-filter '
        [[ -v authors[$GIT_COMMIT] ]] && {
                GIT_AUTHOR_NAME=${authors[$GIT_COMMIT]}     
                GIT_AUTHOR_EMAIL=${authors[$GIT_COMMIT]}
                GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME%$'\t'*}
                GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL#*$'\t'}
        }
    '