Git:也在历史中移动文件

| Git的工具是否可以在修改其完整历史记录的同时将文件移动到新文件夹中,就像文件是从第一次添加时就已经存在过一样? 在合并一些存储库之后,我想到了这一点:我将文件从几个存储库移到一个\“ super \”存储库中的不同文件夹中,但是合并历史在
git rebase
git svn
工具的表现非常糟糕,因为完全不同的文件可能会碰撞它们当然是旧位置。     
已邀请:
现在完成了工作:
git filter-branch --tree-filter \'(ls -A; mkdir TheSubdir; echo TheSubdir) | xargs mv\'
奇怪但很好:.git目录停留在应有的位置;也许git以某种方式阻止了它的移动?     
为了修改您的完整历史记录,您将需要重写每个提交。
git filter-branch
是执行此操作的最佳方法。特别地,对于您的情况,ѭ4将签出历史记录的每个版本,运行您可以在其中修改您认为合适的工作树的命令(例如,移动有问题的目录),然后重写该提交以包含以下内容:树的新内容。     
对于包含空格等的文件/目录,接受的答案中的命令将失败。以下版本是安全的:
git filter-branch -f --tree-filter \'mkdir TheSubdir; \\
find . -maxdepth 1 -name TheSubdir -prune -o -name . -true -o -print0 | \\
xargs -0 mv -t TheSubdir\'
    

要回复问题请先登录注册