[英]How to merge two separate Git repositories into a new repository, with complete history
[英]How to split a repository with subfolders into separate repositories for each subfolder?
我有一个本地存储库,其中包含单独子文件夹中的多个项目,我想将其拆分为单独的、特定于项目的存储库,而不改变实际的文件夹结构。 这是文件夹树当前的样子:
bigfolder/
.git/
project1/
subfolder1/
subfolder2/
project2/
subfolder1/
subfolder2/
我想要的是这个:
bigfolder/
project1/
.git/
subfolder1/
subfolder2/
project2/
.git/
subfolder1/
subfolder2/
我不想删除顶层文件夹或将项目文件夹从它下面移出。 我只想拥有更小的、特定于项目的存储库,以保存每个项目文件夹中文件的提交历史。
我尝试按照本文 GitHub 文档中的说明, 将子文件夹拆分到新存储库中,但是当我将bigfolder/
存储库克隆到project1/
文件夹中时,它bigfolder
中的所有内容复制到project1
文件夹中,包括所有项目文件夹。 使用git filter-repo
删除了所有新创建的项目文件夹中的文件,但新的 project1 文件夹除外,但文件夹树完好无损。 我究竟做错了什么? 提前致谢!
您可以使用git subtree
将子目录拆分为单独的存储库。 该过程可能如下所示。
对于每个项目目录,使用git subtree split
将该目录的历史记录移动到一个独立的分支中:
ref=$(git subtree split --prefix=project1) git branch project1-split $ref
对每个项目目录重复此操作。 这会将每个目录的历史记录拆分为一个单独的分支。
现在你有了它,你可以重新创建你的目录层次结构:
cd.. mkdir new-big-directory cd new-big-directory git clone -b project1-split../big-directory project1 git clone -b project2-split../big-directory project2
这将为您提供所需的布局。 此时您可能需要重命名分支:
git -C project1 branch -m project1-split main git -C project2 branch -m project2-split main
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.