我正在使用git-svn工具将一些Subversion存储库转换为Git。我注意到即使它正确地导入作者信息,提交者信息也与作者信息不匹配(例如,提交者日期是我运行git-svn工具的日期/时间)。
有没有办法让提交者信息与从Subversion导入的作者信息相匹配?如果没有,我如何使用git-filter-branch重写提交来纠正这个问题(即将作者信息复制到每次提交的提交者信息中)?
谢谢!
--- --- UPDATE
Git-svn不会导致这个问题,我是!我一直在重新定义Subversion历史,那就是改变提交者的日期。那么,有没有人如何使用git-filter-branch来改变这一点(即将作者信息复制到每次提交的提交者信息中)?
答案 0 :(得分:1)
您正在寻找过滤器分支的--env-filter
模式。相关环境变量为GIT_AUTHOR_NAME
,GIT_AUTHOR_EMAIL
,GIT_AUTHOR_DATE
,GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
和GIT_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-rebase(1)中的“从上游重新恢复”部分。)