我有一个仓库,我有已经从SVN克隆。我一直在以Git的形式在这个仓库中做一些工作,我不愿意再次通过克隆来丢失这个结构。但是,当我最初克隆存储库时,我未能正确指定svn.authors
属性(或语义相似的选项)。有没有什么办法可以指定SVN作者映射现在存储库完全Git-ified?最好,我想纠正所有旧的提交作者来代表Git作者,而不是原始SVN用户名。使用Git SVN追溯更正作者?
51
A
回答
55
通过看你有什么要清理开始了:
git shortlog -s
对于那些名字中的每一个,创建一个脚本,看起来像这样的条目(假设你希望所有的作家和提交是相同的):
#!/bin/sh
git filter-branch --env-filter '
n=$GIT_AUTHOR_NAME
m=$GIT_AUTHOR_EMAIL
case ${GIT_AUTHOR_NAME} in
user1) n="User One" ; m="[email protected]" ;;
"User Two") n="User Two" ; m="[email protected]" ;;
esac
export GIT_AUTHOR_NAME="$n"
export GIT_AUTHOR_EMAIL="$m"
export GIT_COMMITTER_NAME="$n"
export GIT_COMMITTER_EMAIL="$m"
'
这基本上是我用于large rewrite最近的脚本,你描述的是非常多(除非我有大量的作者)。
编辑使用π在我的剧本指出了一个报价问题。谢谢!
2
你可能想看看git-filter-branch
,特别是--commit-filter
选项。该命令是一个功能强大的电锯,可以重写您的整个存储库历史记录,改变您可能想要更改的任何内容。
注意,当你这样做,你应该从更新库得到新的克隆,因为每一个的SHA1散列提交可能已经改变。
10
git filter-branch
可以用来改写历史的大块。
在这种情况下,你可能会做这样的事情(没有经过测试):
git filter-branch --env-filter '
GIT_AUTHOR_NAME=`echo "${GIT_AUTHOR_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"`
GIT_COMMITTER_NAME=`echo "${GIT_COMMITTER_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"`
GIT_AUTHOR_EMAIL=`echo "${GIT_AUTHOR_EMAIL}" | sed -e "s/svnname1/[email protected]/; s/svnname2/[email protected]/"`
GIT_COMMITTER_EMAIL=`echo "${GIT_COMMITTER_EMAIL}" | sed -e "s/svnname1/[email protected]/; s/svnname2/[email protected]/"`
'
与往常一样,出现以下情况:为了改写历史,你需要一个conspiracy。
相关问题
- 1. 追溯SVN导入Git
- 2. Subversive:追溯更改SVN提交信息?
- 3. 使用git-svn:正确的工作区
- 4. git-svn-rebase正在使用SVN标记
- 5. 每月追溯更新
- 6. git:追溯引入几个合并
- 7. 追溯更改MySQL数据库
- 8. Git rebase更改作者?
- 9. git-svn SVN作者文件的相对路径?
- 10. 当我做“git svn rebase”时,它获取svn作者名称而不是git作者名称
- 11. Highcharts追溯失败
- 12. 追溯应用Netbeans模板
- 13. C++链表值追溯更改
- 14. 比svn更容易使用Git吗?
- 15. 追溯外国键
- 16. 使用git svn在svn服务器上回滚一些更改?
- 17. 使用git-svn和github跟踪上游svn更改?
- 18. svn使用svn更改svn
- 19. 可追溯性矩阵
- 20. SVN to Git使用svn-migration-scripts
- 21. Git svn不使用svn凭证
- 22. 追溯嵌套异常
- 23. 颠覆:追溯合并?
- 24. 如何追溯#pragma pack?
- 25. 团队使用git/git-svn共享工作,只偶尔提交svn
- 26. 解释gfortran错误追溯
- 27. 如何在git服务器库中实现可追溯性?
- 28. XSD的可追溯性
- 29. git-svn和更新的svn url
- 30. 如何追溯错误
Upvoted为:“与往常一样,以下适用:为了改写历史,你需要一个阴谋”说得好。 (虽然链接不再加载) – 2012-03-05 19:36:19
谢谢!我修复了这些链接。 – 2012-03-06 01:25:32