将文件夹移动到另一个Git仓库并保留历史记录

3
我想将一个文件夹从一个 Git 存储库移动到另一个 Git 存储库。
例如:
这是我当前在 Git 中的文件夹结构。
src/Project/RegistrationBundle
src/Project/PictureGenerationBundle
src/Project/CloudDriveBundle
readme.md

我想将它移动到一个新的仓库,并采用以下文件夹结构,但我希望保留以前仓库中的git历史记录:
src/RegistrationBundle
readme.md

我尝试使用git filter-branch运行它。
git filter-branch --subdirectory-filter src/Project/RegistrationBundle/

然而,我找不到一种定制文件夹结构的解决方案。 如果可以实现,请告诉我。 非常感谢。

1
相关链接:https://dev59.com/T1gR5IYBdhLWcg3wDJpN - Maximillian Laumeister
1
您是否希望文件夹“src/RegistrationBundle”仍然是旧存储库的一部分?如果是,您是否希望在src/RegistrationBundle的任何文件中进行单个更改时,两个存储库都能反映出来? - Rishabh Agarwal
1
我对你的问题没有一个完整的答案,但值得一提的是,除了设置存储库移动之外,git在跟踪文件重命名和目录结构更改方面并不出色。如果你首先将目录结构更改作为Repo A中的独立提交进行提交,然后再使用filter-branch将其迁移到Repo B,可能会有一些运气。 - Maximillian Laumeister
2个回答

0
你可以在当前本地代码仓库上更改仓库的架构(删除“Project”文件夹),提交更改,然后再更改远程 git 仓库。
使用 git remote set-url origin <新的 git url> 命令更改仓库 URL。
因为 .git 文件夹中的本地历史记录并没有改变,所以历史记录将保持不变。

0
git filter-branch --subdirectory-filter src/Project/RegistrationBundle/ -- --all

当你运行这个命令时,你只有RegistrationBundle内部的文件,然后在新的存储库中添加一个远程路径到RegistrationBundle,然后执行git pull。

你的回答在审核中出现了。我的评论是为了改进你的回答而提出的建议。请点击上方的“编辑”并添加你所提供的解释。不要在评论中解释,因为评论随时可能被删除。 - CJ Dennis
此命令有一个警告:警告:git-filter-branch 存在大量陷阱,会生成混乱的历史重写。在继续之前按 Ctrl-C 中止,然后使用其他过滤工具,如 'git filter-repo'(https://github.com/newren/git-filter-repo/)。 - AlignedDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接