昨天,我试图使用git-filter-repo
使用以下命令重写我的项目的 Git 历史记录并更新作者/提交者详细信息。
git filter-repo --commit-callback '
old_email = b"[email protected]"
old_email2 = b"[email protected]"
correct_name = b"FirstName LastName"
correct_email = b"[email protected]"
if commit.committer_email == old_email or commit.committer_email == old_email2:
commit.committer_name = correct_name
commit.committer_email = correct_email
if commit.author_email == old_email or commit.author_email == old_email2:
commit.author_name = correct_name
commit.author_email = correct_email
'
问题是,如果我声明的任何字符串中没有空格,例如在correct_name
的值中,这种方法就会有效。但否则,它会给我一个Unknown argument: LastName
错误。
四处搜索后我发现了这个SO 上 5 年前的帖子和这个答案建议将单引号改为双引号,反之亦然。
但奇怪的是,这却完美地起作用了。我不明白为什么会这样?
根据该帖子的 OP,这是 Powershell 中的某种错误。但是,我正在使用最新的跨平台Powershell v7.2.3
。
编辑
正如评论中指出的那样,引号会影响 shell 如何解析字符串。
根据文档,
用单引号引起来的字符串是逐字字符串。
但如上所示,我实际上使用的是单引号,但仍然遇到一些解析问题。一旦将外引号更改为双引号,将内引号更改为单引号,命令作品。