您如何以其他用户身份提交代码?


112

我希望能够针对脚本执行此操作。我实质上是在Git中重新创建某些代码的完整版本历史记录-当前它使用了不同的版本控制系统。我需要脚本能够将提交添加到Git,同时保留提交的原始作者(和日期)。

假设我知道提交作者和进行更改的日期/时间,是否可以使用Git命令执行此操作?我假设有,因为git-p4做类似的事情。我只是在寻求最好的方法。


1
您是否尝试过使用快速导入?
替代

我同意,快速导入可能是最好的方法。您可以使用git commit(或更恰当地使用基础管道:hash-objectupdate-indexwrite-treecommit-treeupdate-ref等),但是快速导入会更快。
克里斯·约翰森

我确实考虑过快速导入,但是由于我自己是git初学者,因此我决定使用基本命令。老实说,我不完全了解快速导入的工作原理,因此在我更好地理解它之前会有点犹豫。是的,使用commit会慢很多,但是至少我会知道会发生什么-特别是在调试时。
卡尔2010年

1
git commit --author =“名称<name@example.com>” -a -m“ commit msg”
Masih

Answers:


148

查看以下--author选项git commit

手册页

--author=<author>

覆盖提交作者。使用标准A U Thor <author@example.com>格式指定明确的作者。否则 <author>,将其视为模式,并用于搜索该作者的现有提交(即rev-list --all -i --author=<author>);然后从发现的第一个此类提交中复制提交作者。


18
此外,还--date可以选择覆盖日期。
克里斯·约翰森

你能举一个具体的例子,我尝试的一切
studgeek 2011年

@Tim Henigan:看来文档现在托管在Github上,因此您发布的手册页链接已失效。您能确认新页面是同一件事吗(如果还有其他答案需要更新链接)?
R0MANARMY 2012年

@ R0MANARMY:我更新了URL。GitHub页面正确。我更新了链接,因为手册页不再托管在kernel.org上。感谢您通知我有关更改的信息。
蒂姆·赫尼根

1
这是我最终使用的内容:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
卡尔

113

补充一下:--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>"

这将使提交看起来像是由指定用户创作提交的。


16
...并看到区别:git log --pretty=fuller
bluenote10

2
完善。这就是我想要的,而我永远找不到git internals手册页。
ksp

3

编辑〜/ .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>"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.