前段时间在将公司的 SVN 项目迁移到 Git 上面去,遇到一个很少见的问题:
有一个小伙伴使用 git-svn 做 rename
操作时候,将一个目录 svn mv
了,
导致新目录只存了最近几个月提交历史,丢失了历史信息。对团队开发而言,
历史提交是非常宝贵的财产,我们想了一些办法,把这些数据提取出来。
# 找出丢失之前的版本,列出丢失目录上层的操作记录。
svn log -l 2000 svn://log4d.com/trunk/apps/ios/ | less
# 将重命名之前的版本拷贝到一个临时目录
svn copy svn://log4d.com/trunk/apps/ios/nami@43252 svn://log4d.com/trunk/apps/ios/nami_lost
# 准备现有代码到 Git
git svn clone svn://log4d.com/ -T trunk/apps/ios/nami -t tags -b branches -r 13532 nami
# 修改 .git/config 来加入丢失的历史数据 Remote
[svn-remote "svn-lost"]
url = svn://log4d.com
fetch = trunk/apps/ios/nami_lost:refs/remotes/trunk-lost
# 并抓取 Remote 内容
git svn fetch
# Rebase 新代码到恢复过来的历史记录上
git checkout master
git rebase --committer-date-is-author-date trunk-lost
其中注意的是手动添加一个 svn-remote
地址为历史数据副本地址。
还有就是 rebase
时候参数 --committer-date-is-author-date
可以保证 rebase
不会造成提交时间被修改,方便回溯。
整整搞了一天,说出来都是泪,希望看到的人用不到,搜到的人用得到。
原文链接: 从 SVN 到 Git,找回丢失的历史 | Log4D
3a1ff193cee606bd1e2ea554a16353ee
欢迎关注我的微信公众号:窥豹