Git 如何拆分Git存储库并保留子目录

在本文中,我们将介绍如何使用Git拆分一个Git存储库并保留其子目录。如果您在使用Git时需要将一个大型代码库拆分成较小的模块或者项目,并且希望保留子目录的历史记录和关联,那么本文将为您提...

示例:

我的项目目录结构如下 项目的总目录为:zszt:

attachments-2024-03-o6gEWqcL65fbfc26cfc60,png

当前三个项目包括前后台都混在一块,我现在想把三个字项目分别拆分出来,没有项目保留自己的项目历史提交记录,怎么做到?

这里使用 git subtree 命令

比如我要拆分 insurance-server 到一个独立项目,并保留且仅保留此项目的历史提交记录,步骤为:

1,git subtree split -P insurance-server -b insurance-temp     或【git subtree split --prefix=insurance-server -b insurance-temp 】     

其中 -P 后面为要拆分的项目名称, -b 为在老项目上创建的一个分支名称

2,在老项目总目录并列的目录创建 mytemp目录,用来拉取拆分项目的分支

3,  cd mytemp; git init

4,git pull ../zszt insurance-temp

5,  git remote add origin https://gitee.com/qyzj_2/SimVue.git

6,  git push -u origin SimVue.git


在本文中,我们将介绍如何使用Git拆分一个Git存储库并保留其子目录。如果您在使用Git时需要将一个大型代码库拆分成较小的模块或者项目,并且希望保留子目录的历史记录和关联,那么本文将为您提供详细的步骤和示例。

1. 使用Git Subtree拆分存储库

Git Subtree是一个强大的命令,它可以将一个存储库的子目录拆分成一个独立的存储库,并保留其历史记录和关联。以下是使用Git Subtree拆分存储库的步骤:

  1. 首先,克隆原始存储库到本地:
    git clone <original-repo-url>
    
    Bash
    Copy
  2. 然后,使用Git Subtree拆分子目录到一个新的存储库:
    git subtree split--prefix=<subdirectory-path>-b <new-branch-name>
    
    Bash
    Copy

    这将创建一个新的分支,并将子目录的历史记录拆分到该分支上。

  3. 接下来,创建一个新的空白存储库,并将新创建的分支推送到该存储库:

    git init <new-repo-name>cd<new-repo-name>git pull ../<new-branch-name>git remote add origin <new-repo-url>git push -u origin master
    Bash
    Copy

    这将创建一个新的存储库并将拆分的子目录推送到该存储库中。

  4. 最后,您可以删除原始存储库中的子目录:

    gitrm-r <subdirectory-path>git commit -m "Remove subdirectory from original repo"git push origin master
    Bash
    Copy

    这将删除原始存储库中的子目录,并将更改推送到远程存储库。

2. 使用Git Filter-Branch拆分存储库

另一种拆分Git存储库的方法是使用Git Filter-Branch命令。以下是使用Git Filter-Branch拆分存储库的步骤:

  1. 首先,克隆原始存储库到本地:
    git clone <original-repo-url>
    
    Bash
    Copy
  2. 然后,使用Git Filter-Branch命令将子目录拆分到一个新的分支上:
    git filter-branch --subdirectory-filter <subdirectory-path>----all
    Bash
    Copy

    这将创建一个新的分支,并将子目录的历史记录拆分到该分支上。

  3. 接下来,创建一个新的空白存储库,并将新创建的分支推送到该存储库:

    git init <new-repo-name>cd<new-repo-name>git pull ../<new-branch-name>git remote add origin <new-repo-url>git push -u origin master
    Bash
    Copy

    这将创建一个新的存储库并将拆分的子目录推送到该存储库中。

  4. 最后,您可以删除原始存储库中的子目录:

    gitrm-r <subdirectory-path>git commit -m "Remove subdirectory from original repo"git push origin master
    Bash
    Copy

    这将删除原始存储库中的子目录,并将更改推送到远程存储库。

  • 发表于 2024-03-21 17:19
  • 阅读 ( 456 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章