如何更改删除+;添加以在git历史记录中移动
我有一个git存储库,它混合了一些旧的svn回购协议。当我混合了所有我没有意识到的东西来做git mv,而不是仅仅移动文件,所以现在大多数文件的svn历史都丢失了。有办法解决这个问题吗 旧结构类似于:如何更改删除+;添加以在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 | |
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之后的历史记录,但我还想获取以前的历史记录。