将文件夹移动到一个新的git项目中,将父文件夹添加为子模块

myzjeezk  于 2023-08-01  发布在  Git
关注(0)|答案(1)|浏览(106)

我一直在使用git仓库projectA。经过一些工作后,我意识到我的更改并不完全适合这个项目的范围,我想将我创建的新文件夹分离到一个新的git repo中,同时将剩余的内容添加到projectA中作为新repo中的子模块。
当前文件夹结构为

projectA
├── build
├── executables
├── lib
├── *projectB*
│   ├── *subfolders from project B*
│   └── ....
├── resources
├── src
└── test

字符串
我想做的是将整个*projectB*文件夹移动到一个新的GitHub存储库中。由于projectB依赖于projectA的其他文件夹中定义的一些目标,我认为最简单的解决方案是

projectB
├── lib
│   └── *projectA*
└── subfolders from project B
    ├── ....
    └── ....


其中projectA现在是git子模块。
有没有一种干净、快速、可能是半自动化的方法来实现这一点,以避免搞砸我的git仓库?

62o28rlo

62o28rlo1#

假设projectA有分支main。要将projectB的历史记录与当前存储库分离,请执行以下操作:

git checkout -b b_main main
git filter-branch -f --subdirectory-filter projectB

字符串
现在b_main是以projectB作为根的分支。如果您 checkout b_main,您将看到前一个projectB下的文件和文件夹。
projectA的历史中删除projectB的历史。

git checkout -b a_main main
git filter-branch -f --tree-filter 'rm -rf projectB'


现在a_main没有projectB,就好像它从未存在过一样。推送a_main以替换projectA远程存储库中以前的main

git push origin -f a_main:main


切换到b_main并添加projectA的新main作为子模块。

git checkout b_main
git submodule add -b main <repo_url_to_projectA>
git commit


b_main作为main推送到新存储库。

git push <repo_url_to_projectB> b_main:main


克隆新的projectB以检查它是否正常。

git clone --recurse-submodules <repo_url_to_projectB> -b main

相关问题