gpt4 book ai didi

svn - 使用 git filter-branch : how to recover history from renamed/moved files? 拆分 repo

转载 作者:太空狗 更新时间:2023-10-29 13:27:00 27 4
gpt4 key购买 nike

免责声明:我看过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 显示:-提交1-提交2

git log --follow ABC/myFile.txt 显示:-提交1-提交2- commit3(ABC目录当时不存在)...

现在,当将 git 仓库拆分为一个不同的 ABC git 仓库时:git log --follow 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 中的情况。下一步是做另一个 filter-branch 使其成为永久嫁接等。我制作了一个截屏视频来演示这里的嫁接(尽管上下文有点不同):

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html

请注意,这必须在每个移动文件夹的基础上完成,这是很多工作,并且您最终会为每个案例进行 merge 提交。但是 git 日志有效。

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

关于svn - 使用 git filter-branch : how to recover history from renamed/moved files? 拆分 repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com