Tian Jiale's Blog

修改 Git 记录中的作者信息

Git 设置用户名和邮箱

既然要做多人开发,那么必然要设置不同的用户名和邮箱,下面是设置的命令。

# 全局设置
git config --global user.name <username>
git config --global user.email <email>

# 分支设置
git config user.name <username>
git config user.email <email>

如上,我们可以对每个人设置一个分支,在不同分支中使用不同的用户名和邮箱。

安装 git-filter-repo

git-filter-repo 的项目地址在 git-filter-repo ,安装要求是 Git 版本不低于 2.22.0,python3 版本不低于3.5。python3 一般是 Linux 平台中使用并于python2 区分的,但在 Windows 中是不可用的。在 INSTALL.md 中有 Windows 用户须知,但令人难受的是这一小节并没有说如何安装这个 python 脚本,另外见到代码目录中 git_filter_repo.py 文件最近修改时间是三年前,也i就没尝试这个脚本,话说,他就不能写清楚吗?

虽然不能直接在 Windows 直接使用,但我们有 WSL2 啊,在 INSTALL.md 中有以下 bash指令:

PACKAGE_TOOL install git-filter-repo

我们 WSL2 中有 apt-get 啊,当把命令输进去后,竟然显示没有 git-filter-repo 这个东西,What Fuck! 只能使用 pip 安装了,但它提示这个并不会把这个脚本自动添加到 PATH 中,不过没关系,到这一步了也不在乎这么一点小缺点了,安装后添加按照如下命令添加 PATH。

# 当前终端有效
export PATH=$PATH:/xxx/xxx
# 永久有效
# 最后一行添加上面的指令
vi .bashrc

现在我们终于把这玩意装好了。

修改用户信息

第一步,我们需要克隆一份干净的仓库,切换的新目录并克隆。

在仓库目录下执行如下命令。

#将所有用户名中包含的old 替换成 new(注意,不支持中文)
git filter-repo --name-callback 'return name.replace(b"old", b"new")'

#将所有 commit 信息的 email中包含的 old@example.com 替换成 new@example.com
git filter-repo --email-callback 'return email.replace(b"old@example.com", b"new@example.com")'

当中指令执行完之后所有作者信息就都被修改了,就可以把这个本地仓库提交到我们希望的远程仓库了。

因为信息修改了,所以远程仓库同步地消失了,这时需要手动添加远程仓库 git remote add origin <repo.git>,然后强制提交更新。

git push --force --tags origin 'refs/heads/*'

需要注意的是,不要修改已提交到远程仓库的 commit 的作者信息,这会产生大量冲突,对项目管理十分不友好。

所以在使用多个账号提交 GIt 记录时,一定要事先设置用户名和邮箱。