我有一个git存储库,它是一些旧的svn repos的混合。当我混合了一切我没有意识到做git mv而不仅仅是移动文件所以现在大多数文件的svn历史都丢失了。有没有办法解决这个问题?
旧结构类似于:
svn1
|_apps/
|_tests/
|_...
svn2
|_src
|_libs
svn3
|_src
|_libs
现在:
root
|_libs
| |_svn1_name
| | |_apps
| | |_tests
| | |_...
|_addons
| | |_svn2_name
| | | |_src
| | | |_libs
| | |_svn3_name
| | | |_src
| | | |_libs
我已经尝试检查前一次提交到这个MV,做git mv,创建一个新的分支和反对大师反对,但结构有点复杂,合并是一个痛苦。有更简单的方法吗?
答案 0 :(得分:4)
通常情况下,Git不会以删除和添加的方式跟踪重命名。当在同一个提交中发生时,Git可以快速推断重命名已完成,并在git log
中正确显示重命名。但是,如果删除和添加同一文件发生在不同的提交中,那么您需要使用git log
的--find-copies-harder
开关:
- 发现 - 复制 - 硬
出于性能原因,默认情况下,
-C
选项仅在相同变更集中修改了副本的原始文件时才查找副本。此标志使命令检查未修改的文件作为副本源的候选者。对于大型项目来说,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C
选项具有相同的效果。
答案 1 :(得分:0)
在单个文件上使用git log --follow我可以跟踪其作为add + remove
提交的重命名之外的历史记录