合并不同目录结构的Git仓库并保留classes文件双方提交历史的方案咨询
迁移旧仓库classes目录历史到新仓库操作步骤
操作前请提前备份两个仓库的本地代码,避免误操作丢失数据。
第一步:预处理旧仓库(仅保留classes目录历史并重写路径)
你需要先安装git-filter-repo工具,可通过pip install git-filter-repo或对应系统包管理器直接安装。
- 克隆旧仓库到本地
git clone <旧仓库BitBucket克隆地址> old-repo && cd old-repo - 过滤仓库仅保留classes目录,同时将路径重写为新仓库的对应路径
执行完成后旧仓库的所有非classes目录都会被移除,剩下的文件路径和新仓库classes目录完全一致,所有提交历史都会保留。git filter-repo --path project-atm/src/classes/ --path-rename project-atm/src/classes/:atm-app/main/default/classes/
第二步:合并处理后的旧历史到新仓库
- 进入本地新仓库目录,确保所有本地修改已提交或暂存,切换到你需要合并历史的目标分支
cd /path/to/your/new-repo git checkout <目标分支名,比如main> - 将预处理完成的旧仓库添加为本地远程源
git remote add old-processed ../old-repo - 拉取旧仓库的所有历史
git fetch old-processed - 合并旧仓库历史,允许无关历史
如果出现同名文件冲突,直接执行git merge --allow-unrelated-histories old-processed/main -m "chore: 合并旧仓库classes目录全量历史"git checkout --ours atm-app/main/default/classes/*保留新仓库的文件版本,再执行git commit即可,不会影响历史追溯
验证效果
合并完成后直接执行git blame atm-app/main/default/classes/你的目标文件.cls,即可查看该文件从旧仓库创建以来的完整提交历史,git log也能查到对应的旧提交记录。
原操作失败原因说明
你之前的操作没有对旧仓库的路径做重写映射,git默认将不同路径的文件识别为两个完全无关的文件,因此无法关联历史记录,也就无法通过blame查到旧提交。
Salesforce场景扩展
如果后续需要迁移其他元数据(比如trigger、lwc组件等)的历史,只需要在第一步预处理旧仓库时,新增对应的--path 旧路径 --path-rename 旧路径:新路径参数即可复用该流程。
内容的提问来源于stack exchange,提问作者zanstaszek9
相关产品推荐
相关产品推荐

