You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Git仓库内Pro_A子文件夹转为独立仓库并保留提交历史?

将Pro_A转为独立Git仓库并保留提交历史的实现方案

完全可以保留Pro_A的提交历史完成需求,具体操作步骤如下:

1. 从Project_A中提取Pro_A的独立提交历史

首先克隆一份Project_A的本地副本(避免修改原仓库导致风险):

git clone <Project_A的远程仓库地址> temp_Project_A
cd temp_Project_A

使用git filter-repo工具提取仅涉及Pro_A文件夹的提交历史,并将文件路径从Pro_A/迁移到仓库根目录:

git filter-repo --path Pro_A --path-rename Pro_A/:

这一步会生成一个仅包含Pro_A相关提交的干净仓库,所有历史记录完整保留。

2. 创建独立的Pro_A远程仓库并推送

在Git托管平台创建一个新的空仓库作为Pro_A的远程仓库,然后将本地提取后的仓库推送到新远程:

git remote add origin <新的Pro_A远程仓库地址>
git push -u origin main

3. 修改原Project_A,将Pro_A替换为submodule

进入原Project_A本地仓库:

cd /path/to/Project_A

删除原有的Pro_A文件夹并提交:

git rm -r Pro_A
git commit -m "移除Pro_A文件夹,替换为独立submodule"

添加新的Pro_A独立仓库作为submodule:

git submodule add <新的Pro_A远程仓库地址> Pro_A
git commit -m "添加Pro_A作为submodule"
git push

4. 更新Project_B中的Pro_A submodule引用

进入Project_B本地仓库:

cd /path/to/Project_B

修改submodule的远程地址为新的Pro_A独立仓库:

git config submodule.Pro_A.url <新的Pro_A远程仓库地址>

同步并更新submodule:

git submodule sync
git submodule update --init --recursive

提交修改并推送到远程:

git commit -m "更新Pro_A submodule为独立仓库"
git push

完成以上步骤后,Project_A和Project_B都会通过submodule引用独立的Pro_A仓库,且Pro_A的所有历史提交都完整保留。后续对Pro_A的修改可以直接在submodule目录中提交,再在主仓库更新submodule的引用即可。

内容的提问来源于stack exchange,提问作者yyf91699

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:10:23