如何更改删除+添加以移动git历史记录

时间:2009-12-04 19:48:47

标签: git history

我有一个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,创建一个新的分支和反对大师反对,但结构有点复杂,合并是一个痛苦。有更简单的方法吗?

2 个答案:

答案 0 :(得分:4)

通常情况下,Git不会以删除和添加的方式跟踪重命名。当在同一个提交中发生时,Git可以快速推断重命名已完成,并在git log中正确显示重命名。但是,如果删除和添加同一文件发生在不同的提交中,那么您需要使用git log--find-copies-harder开关:

  

- 发现 - 复制 - 硬

     
    

出于性能原因,默认情况下,-C选项仅在相同变更集中修改了副本的原始文件时才查找副本。此标志使命令检查未修改的文件作为副本源的候选者。对于大型项目来说,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C选项具有相同的效果。

  

答案 1 :(得分:0)

在单个文件上使用git log --follow我可以跟踪其作为add + remove

提交的重命名之外的历史记录