如何以不同的用户提交代码?

我希望能够为了一个剧本这样做。我实际上是在 Git 中重新创建了一些代码的整个版本历史——它目前使用了一个不同的版本控制系统。我需要脚本能够添加到 Git 的提交中,同时保留提交的原始作者(和日期)。

假设我知道提交作者和更改的日期/时间,是否有 Git 命令允许我这样做?我假设有,因为 git-p4也有类似的功能。我只是想知道最好的方法。

79319 次浏览

查看 git commit--author选项:

来自 手册:

--author=<author>

重写提交作者。指定一个显式作者 使用标准的 A U Thor <author@example.com>格式,否则 假设 <author>是一种模式 并用于搜索现有的 提交作者(即 rev-list --all -i --author=<author>) ; 然后将提交作者从 第一次发现这样的提交。

另外: 接受答案中提到的 --author选项将只覆盖 作者,而不覆盖提交的 委员信息。

在大多数情况下,这是正确的行为,但是如果由于某种原因您也需要手动覆盖 提交者信息提交者信息,那么使用 GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL环境变量(也有一个 GIT_COMMITTER_DATE)。见 Git-内部构件-环境-变量

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"

这将使提交看起来像是由指定用户提交的编写的 还有

使用-c 选项和 git-commit 覆盖以前的任何配置。它不会触及您的全局/项目配置。例如,覆盖姓名和电子邮件:

git -c user.name='My Name' -c user.email='my@email.com' commit -m "Custom message"

但是,如果您打算将其作为附加设置保留,我建议使用别名。编辑 ~/.gitconfig文件并为每个非默认用户和电子邮件添加一个新别名。

[user]
name = My Name
email = default@email.com


[alias]
commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit

别名将在全球范围内应用,请进行测试。

git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"