繁体   English   中英

如何将带有子文件夹的存储库拆分为每个子文件夹的单独存储库?

[英]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将子目录拆分为单独的存储库。 该过程可能如下所示。

  1. 对于每个项目目录,使用git subtree split将该目录的历史记录移动到一个独立的分支中:

     ref=$(git subtree split --prefix=project1) git branch project1-split $ref

    对每个项目目录重复此操作。 这会将每个目录的历史记录拆分为一个单独的分支。

  2. 现在你有了它,你可以重新创建你的目录层次结构:

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM