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

Git 如何以不同的用户身份提交代码?,git,command-line,commit,Git,Command Line,Commit,我希望能够为脚本执行此操作。我实际上是在用Git重新创建一些代码的整个版本历史记录——它目前使用不同的版本控制系统。我需要脚本能够添加对Git的提交,同时保留提交的原始作者(和日期) 假设我知道提交作者和更改的日期/时间,是否有Git命令允许我这样做?我假设有,因为git-p4做了类似的事情。我只是想知道最好的方法 查看git commit的--author选项: 从: --作者= 重写提交作者。指定明确的作者 使用标准的A U-Thor格式。否则 被认为是一种模式 并用于搜索现有的 由该作者提

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

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

查看
git commit
--author
选项:

从:

--作者=

重写提交作者。指定明确的作者 使用标准的
A U-Thor
格式。否则
被认为是一种模式 并用于搜索现有的 由该作者提交(即
revlist--all-i--author=
);然后,提交作者将从 第一次发现这样的犯罪


再补充一点:在接受的答案中提到的
--author
选项将只覆盖作者,而不是提交的提交者信息

在大多数情况下,这是正确的行为,但如果出于某种原因,您还需要手动覆盖提交者信息,请使用
GIT\u提交者名称
GIT\u提交者电子邮件
环境变量(还有
GIT\u提交者日期
)。看

$GIT\u COMMITTER\u NAME=“新名称”GIT\u COMMITTER\u EMAIL=”name@email.com“git commit--author=”新名称”

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

将-c选项与git提交一起使用,以覆盖任何以前的配置。它不会触及您的全局/项目配置。例如,要覆盖名称和电子邮件:

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>"
git commit-m“带有提交者和作者姓名的自定义消息”
git commit-x-m“具有提交者和作者我的x名的自定义消息”
git commit-y-m“具有提交者和作者我的y名称的自定义消息”
git commit-z-m“具有提交者和作者我的z名的自定义消息”

您是否尝试过使用快速导入?我同意,这可能是最好的方法。您可以使用git commit(或者更恰当地说是底层管道:散列对象、更新索引、写入树、提交树、更新引用等),但是快速导入会更快。我确实想到了快速导入,但由于我自己是git初学者,所以我决定使用基本命令。老实说,我并不完全理解导入的速度,因此在我更好地理解它之前,我对使用它有点犹豫。是的,使用commit会慢很多,但至少我知道会发生什么-特别是在调试时。git commit--author=“Name”-a-m“commit msg”还有,
--date
选项覆盖日期。你能给出一个具体的例子吗,我的一切try@TimHenigan:看起来文档现在托管在上面了,所以你发布的手册页链接已经死了。你能确认新页面是一样的吗(以防有其他答案需要更新链接)?@R0MANARMY:我更新了URL。GitHub页面是正确的。我更新了我的链接,因为手册页不再托管在kernel.org上。谢谢你让我知道这项更改。以下是我最后使用的内容:
git commit-a--author=“$user\u details”--date=“submit\u date$submit\u time”--file=/tmp/commit\u msg
。。。要看区别:
git log--pretty=fuller
Perfect。这就是我想要的,我可能永远也找不到git internals手册页。我得到一个错误:“致命:选项-m不能与-c/-c/-F组合。”在删除“-m”时,得到另一个错误:“致命:无法查找提交用户。email=“@ArnabBiswas感谢您的反馈。我刚刚编辑了我的答案,因为我错误地输入了第一个示例:commit必须在config选项之后。
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>"