2009-10-29 173 views
2

我正在使用git-svn工具将一些Subversion存储库转换为Git。我注意到,即使它正确导入作者信息,提交者信息与作者信息不匹配(例如,提交者日期是我运行git-svn工具的日期/时间)。从SVN导入历史记录到Git - 更改提交者信息

有没有办法让提交者信息与从Subversion导入的作者信息相匹配?如果没有,我该如何使用git-filter-branch重写提交来纠正这个问题(即,将每个提交的作者信息复制到提交者信息中)?

谢谢!

--- UPDATE ---

的Git,SVN是不是造成这个问题,我在这里!我一直在重新规划Subversion的历史,这正在改变提交者的日期。那么,是否有人如何使用git-filter-branch来改变它(即将每个提交的作者信息复制到提交者信息中)?

+0

FWIW,我也使用git-svn的,并没有表现这种方式我。提交者和作者信息总是匹配。 – 2009-10-29 13:08:35

+0

我想清楚发生了什么 - 我一直在重新设计SVN历史,并且这正在改变提交者的日期。 – Jordan 2009-10-29 13:40:36

+0

由于它不是git-svn的问题,任何人都知道如何使用过滤器分支将作者信息复制到提交者信息字段中? – Jordan 2009-10-29 13:41:37

回答

1

您在寻找过滤分支的--env-filter模式。相关环境变量为GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL,GIT_AUTHOR_DATE,GIT_COMMITTER_NAME,GIT_COMMITTER_EMAILGIT_COMMITTER_DATE

你的命令是这样的:

git filter-branch --env-filter ' 
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" 
export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" 
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' -- --all 

--all规定,这应该对所有分支机构进行操作。你的原始参考将被保存在参考文献/原始名称空间中,以防你陷入困境。

当然,我不能发布任何此类信息,但不会对任何人可能遇到的危险提出警告。从man git-filter-branch:

警告!重写的历史将为所有对象具有不同的对象名称,并且不会与原始分支会聚。您将无法轻松地将重写的分支推送并分发到原始分支的顶部。如果您不知道全部含义,请不要使用此命令,并且如果简单的单次提交就足以解决您的问题,请避免使用它。 (见的git-底垫(1)了解更多信息“恢复上游REBASE”部分想改写历史的出版。)

+0

这是正确的答案,但有一个小错字:你不能把'='字符放在--env-filter之后;它必须是一个空间。除此之外,它完美的工作。谢谢! – Jordan 2009-10-30 12:15:44

+0

对不起 - 固定! – Cascabel 2009-10-30 16:57:17

相关问题