免责声明:我见过Detach (move) subdirectory into separate Git repository,但它没有完全回答这个问题。
我已将项目从svn迁移到git。当它存在于svn中时,一些文件被移动和/或重命名。
在git迁移之后,某些提交只能在git log --follow
这样:
git结构如下:
MyMainRepo/
.git/
XYZ/
ABC/myFile.txt
git log ABC/myFile.txt
显示:
- commit1
- commit2
git log --follow ABC/myFile.txt
显示:
- commit1
- commit2
- commit3(那时ABC目录不存在)
...
现在,当拆分git repo以获得一个独特的ABC git repo时:
git log --follow ABC/myFile.txt
现在已经失去了历史,我只是:
我想要的是什么:
欢迎任何帮助:)
答案 0 :(得分:1)
我刚遇到同样的问题,即使使用索引过滤器,也无法获得已移动文件夹的完整历史记录。
我的解决方法是对文件夹(ABC)进行单独的子目录导出,该文件夹在移动之前的某个位置移动,然后将该存储库的历史记录移植到新存储库中。
让我们说ABC过去被称为MNO。我克隆MyMainRepo,重置为MNO仍然存在时的版本(在重命名为ABC之前)。我用subdir做一个filter-branch来获取一个名为“MNO”的存储库。
在ABC内部,我做了git fetch ../MNO
。
然后我输入内容被移动到ABC的提交(这将是第一次使用repo ABC中的内容提交)将MNO repo中的最后一次提交添加到.git/grafts
。
现在我可以在ABC内部执行git登录文件,并查看历史记录跟踪它在MNO中的情况。下一步是做另一个过滤器分支,使其成为永久性移植物等。我已经制作了一个在这里演示嫁接的截屏视频(虽然上下文有点不同):
http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html
请注意,这必须在每个移动文件夹的基础上完成,这需要大量的工作,并且最终会为每个案例提供合并提交。但是git log工作。
我写这篇文章有点匆忙,但如果有人有兴趣尝试这种方法,请告诉我,我会尝试清理一下,并展示一些更具体的例子。
答案 1 :(得分:0)
您可能需要在历史记录中重新命名,而不是使用子目录过滤器,而是使用与日志评估类似的配方的索引过滤器。我有一个working example of an index filter here和documentation for how to use it here。