Svn 使用git过滤器分支拆分repo:如何从重命名/移动的文件恢复历史记录?

Svn 使用git过滤器分支拆分repo:如何从重命名/移动的文件恢复历史记录?,svn,git,history,git-filter-branch,Svn,Git,History,Git Filter Branch,免责声明:我已经看过了,但它并没有完全回答这个问题 我已经将一个项目从svn迁移到git。当它存在于svn中时,一些文件被移动和/或重命名 在git迁移之后,一些提交仅在git日志中可见——follow 因此: git结构如下所示: MyMainRepo/ .git/ XYZ/ ABC/myFile.txt git log ABC/myFile.txt显示: -委员会1 -委员会2 git日志——遵循ABC/myFile.txt显示: -委员会1 -委员会2 -commit3(当时ABC目录不

免责声明:我已经看过了,但它并没有完全回答这个问题

我已经将一个项目从svn迁移到git。当它存在于svn中时,一些文件被移动和/或重命名

在git迁移之后,一些提交仅在git日志中可见——follow

因此:

git结构如下所示:

MyMainRepo/
.git/
XYZ/
ABC/myFile.txt
git log ABC/myFile.txt
显示: -委员会1 -委员会2

git日志——遵循ABC/myFile.txt
显示: -委员会1 -委员会2 -commit3(当时ABC目录不存在)

现在,将git回购拆分为不同的ABC git回购时:
git log——遵循ABC/myFile.txt
现在丢失了旧的历史记录,我只有:

  • 委员会1
  • 委员会2
我想要的是:

  • 从MyMainRepo中拆分ABC
  • 不失去历史

欢迎您提供任何帮助:)

在历史上重新命名之后,您可能需要使用一个索引过滤器,其方法与日志评估类似,而不是子目录过滤器。我有一个和。

我刚刚遇到了同样的问题,无法获得移动文件夹的完整历史记录,即使使用索引过滤器也是如此

我的解决方法是对在移动之前的某个位置移动的文件夹(ABC)进行单独的子目录导出,然后将此存储库的历史移植到新存储库中

比如说,ABC过去被称为MNO。我克隆了MyMainRepo,重置为MNO仍然存在的版本(在它被重命名为ABC之前)。我使用subdir执行一个过滤器分支,以获得一个名为“MNO”的存储库

在ABC内部,我执行一个
git fetch../MNO

然后,我输入内容移动到ABC时的提交(这将是repo ABC中内容的第一次提交),加上MNO repo中最后一次提交到
.git/grafts

现在,我可以在ABC内部对文件进行git登录,并查看历史跟踪,了解它在MNO中的运行情况。下一步是做另一个过滤器分支,使其成为永久性移植,等等。我在这里制作了一个演示移植的屏幕广播(尽管上下文有点不同):

请注意,这必须在每个移动文件夹的基础上完成,这是一项大量的工作,并且最终每个案例都会有一个合并提交。但是git日志是有效的


我写这篇文章有点匆忙,但如果有人对尝试这种方法感兴趣,请告诉我,我会尝试澄清一下,并展示一些更具体的例子。

现在似乎位于,现在可能已经移动到,但确实不清楚,因为原始答案没有提供太多关于其示例用法实现的细节。