2010-09-12 36 views
80

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

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

+1

您是否尝试过使用快速导入? – alternative 2010-09-12 23:03:02

+0

我同意,[fast-import](http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html)可能是最好的选择。你可以使用* git commit *(或者更合适的底层管道:* hash-object *,* update-index *,* write-tree *,* commit-tree *,* update-ref *等),但是*快速导入*会更快。 – 2010-09-12 23:39:05

+0

我的确在想快速导入,但由于我自己就是git初学者,所以我决定使用基本命令。说实话,我并不完全理解快速导入是如何工作的,因此,直到我更好地理解它,我们才有点犹豫。是的,使用提交会慢很多,但至少我会知道会发生什么 - 特别是在调试时。 – Carl 2010-09-12 23:47:34

回答

113

检查出git commit--author选项:

man page

--author=<author>

覆盖提交作者。使用标准A U Thor <[email protected]>格式指定明确的作者 。否则 <author>被假定为 的模式,并用于搜索该作者所提交的现有 (即rev-list --all -i --author=<author>);首先提交作者从 中复制这样的提交。

+12

此外,'--date'选项覆盖日期。 – 2010-09-12 23:21:25

+0

你可以举一个具体的例子,我试试的一切 – studgeek 2011-06-17 17:13:37

+0

@Tim Henigan:看起来文档现在托管在[Github](http://schacon.github.com/git/git-commit.html)上,所以* man您发布的网页*链接已死亡。你能否确认新的页面是一样的(如果还有其他需要更新链接的答案)? – R0MANARMY 2012-02-06 19:11:54

58

我想补充这件事:接受的答案中提到的--author选项只覆盖了作者,而不是提交者的提交信息。

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

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="[email protected]" git commit --author="New Name <[email protected]>" 

这将使提交看上去像是撰写指定用户提交。

+8

...并查看区别: 'git log --pretty = fuller' – bluenote10 2015-11-03 20:41:52

+0

完美。这就是我想要的,我从来没有找到git内部手册页。 – ksp 2017-05-17 07:02:40

相关问题