我正在使用git filter-repo重写git仓库中提交作者的电子邮件。commit.author_email
字段的格式如下:AA01\myuserid
是的,我知道这并不像一个电子邮件地址,但它是它是什么.我需要实现的是设置提交作者的电子邮件到commit.author_email
字段的第二部分(例如myuserid
)
这是我执行的命令
git filter-repo --force --refs master --commit-callback '
>> commit.author_email_split = commit.author_email.split("\\")
>> '
现在,我只想让拆分工作,但它失败了,错误如下:
Traceback (most recent call last):
File "C:\git-filter-repo\git-filter-repo", line 4005, in <module>
main()
File "C:\git-filter-repo\git-filter-repo", line 4001, in main
filter = RepoFilter(args)
File "C:\git-filter-repo\git-filter-repo", line 2760, in __init__
self._handle_arg_callbacks()
File "C:\git-filter-repo\git-filter-repo", line 2865, in _handle_arg_callbacks
handle('commit')
File "C:\git-filter-repo\git-filter-repo", line 2858, in handle
setattr(self, callback_field, make_callback(type, code_string))
File "C:\git-filter-repo\git-filter-repo", line 2841, in make_callback
' '+'\n '.join(str.splitlines()), globals())
File "<string>", line 3
commit.author_email_split = commit.author_email.split(\)
^
SyntaxError: unexpected character after line continuation character
我试着重新检查命令语法,隐藏字符的存在等等,但是没有任何效果。这里有什么问题吗?
2条答案
按热度按时间e0bqpujr1#
我的问题是我使用的是Powershell,这导致了行延续字符的问题(感谢Joachim Sauer的提示,非常有用!)。
在解决这个问题后,Python抱怨错误
%b requires a bytes-like object, or an object that implements __bytes__, not 'str'
,所以我也添加了encode()
和decode()
。你可以在git bash中找到最终的解决方案(我认为在任何类似bash的提示符中)。i2byvkas2#
以下是解决问题的方法,如果您的目标是:
在git仓库中重写提交作者的电子邮件。
1.首先获取list of all emails in your repo。
1.创建一个.mailmap file,列出所有的新邮件,然后列出它们的旧邮件(这在大多数编辑器中应该很容易快速完成,即使你有很多邮件要更新)。你可以用
git log
测试你的.mailmap
文件。1.现在您可以使用--mailmap option to git filter-repo使更改永久化。