Git:也在历史中移动文件

dro*_*nus 8 git git-branch

是否有可能使用Git的工具将文件移动到新的文件夹,同时修改其完整的历史记录,就好像文件是从他们的第一次添加?

我想出了这个并购一些回购在一起后,我搬到从几个回购到不同的文件夹里面的文件一个"超级"回购,但合并后的历史表现非常糟糕与git rebasegit svn工具完全不同的文件可能会在自己的老位置,当然碰撞.

dro*_*nus 7

所以现在这完成了工作:

git filter-branch --tree-filter '(ls -A; mkdir TheSubdir; echo TheSubdir) | xargs mv'

奇怪但很好:.git目录停留在应有的位置; 也许git以某种方式阻止它的运动?


Bri*_*ell 5

要修改完整的历史记录,您需要重写每次提交.git filter-branch是最好的方法.特别是,对于您的情况,git filter-branch --tree-filter some-command将检查您的历史记录的每个版本,运行您可以根据需要修改工作树的命令(例如移动有问题的目录),然后重写该提交以包含新的树的内容.