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

如何更改删除+;添加以在git历史记录中移动,git,history,Git,History,我有一个git存储库,它混合了一些旧的svn回购协议。当我混合了所有我没有意识到的东西来做git mv,而不是仅仅移动文件,所以现在大多数文件的svn历史都丢失了。有办法解决这个问题吗 旧结构类似于: svn1 |_apps/ |_tests/ |_... svn2 |_src |_libs svn3 |_src |_libs 现在: root |_libs | |_svn1_name | | |_apps | | |_tests | |

我有一个git存储库,它混合了一些旧的svn回购协议。当我混合了所有我没有意识到的东西来做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,创建一个新的分支,并根据它重新设置master的基址,但是结构有点复杂,合并是一件痛苦的事情。有更简单的方法吗?

通常,Git跟踪重命名的方式与跟踪删除和添加的方式没有任何区别。当这发生在同一个提交中时,Git可以快速推断重命名已经完成,并在
Git日志中适当地显示重命名。但是,如果同一文件的删除和添加发生在不同的提交中,则需要使用以下开关的
--find copies harder

--更难找到副本

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


使用git log--跟踪单个文件,我可以跟踪其历史记录,而不仅仅是作为add+remove提交的重命名

您要恢复的历史记录,git's或svn?在移动文件之前,git存储库中的svn历史记录,如果我这样做:git log addons/svn2_name/src现在我只获取mv之后的历史记录,但我还想获取以前的历史记录。