如何将代码作为不同的用户提交?

时间:2010-09-12 22:35:04

标签: git command-line commit

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

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

3 个答案:

答案 0 :(得分:134)

查看--author的{​​{1}}选项:

来自man page

  

git commit

     

覆盖提交作者。指定明确的作者   使用标准--author=<author>格式。除此以外   假设A U Thor <author@example.com>是一种模式   并用于搜索现有的   该作者承诺(即<author>);然后从中复制提交作者   首先发现这样的提交。

答案 1 :(得分:87)

添加到此:接受的答案中提到的--author选项只会覆盖 author ,而不会覆盖提交的 committer 信息。< / p>

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

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

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

答案 2 :(得分:6)

使用-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>"
相关问题