首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
分布式数据库
›
git subtree在当地归并子堆栈到主堆栈
返回列表
发新帖
git subtree在当地归并子堆栈到主堆栈
[复制链接]
发表于 2025-10-15 13:49:36
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
假如你只想在当地将拆分后的子堆栈归并到主堆栈,而不涉及远程操纵,可以使用 git subtree add 或 git subtree merge 下令来完成。以下是详细的步调:
条件条件
假设你已经通过 git subtree split 拆分出了一个子堆栈,而且子堆栈的当地路径为 ./subtree-repo,主堆栈的路径为 ./main-repo。
步调 1:在主堆栈中添加子堆栈作为远程堆栈
在主堆栈中,将当地子堆栈添加为一个远程堆栈。这一步是通过 git remote add 下令完成的。
cd main-repo
git remote add -f subtree-repo ../subtree-repo
复制
代码
-f 参数会主动拉取当地子堆栈的全部分支。
subtree-repo 是你为当地子堆栈指定的远程堆栈名称。
../subtree-repo 是子堆栈的当地路径。
步调 2:将子堆栈的内容归并到主堆栈的指定目次
使用 git subtree add 或 git subtree merge 下令,将子堆栈的内容归并到主堆栈的指定目次中。
假如是第一次归并子堆栈:
git subtree add --prefix=subdir subtree-repo main --squash
复制
代码
--prefix=subdir 指定子堆栈的内容将被放置在主堆栈的 subdir 目次下。
subtree-repo 是远程堆栈的名称。
main 是子堆栈的分支名称(根据现真相况更换)。
--squash 会将子堆栈的全部更改压缩为一个提交。
假如之前已经添加过子堆栈,现在只须要更新内容:
git subtree merge --prefix=subdir subtree-repo/main --squash
复制
代码
--prefix=subdir 指定子堆栈的内容将被放置在主堆栈的 subdir 目次下。
subtree-repo/main 是子堆栈的分支路径。
--squash 会将子堆栈的更改压缩为一个提交。
步调 3:办理辩说并提交
假如在归并过程中出现辩说,须要手动办理辩说,然后提交更改:
git add .
git commit -m "Merge subtree-repo into subdir"
复制代码
步调 4:验证归并结果
查抄主堆栈的 subdir 目次,确认子堆栈的内容已经精确归并到主堆栈中。
除了使用 git subtree 和 git remote 的方法外,另有其他几种方式可以将当地子堆栈的内容归并到主堆栈中。以下是几种替换方法:
方法 1:手动复制文件
假如子堆栈的内容较少,大概你只须要部分文件,可以手动将子堆栈的文件复制到主堆栈中。
操纵步调:
复制文件
:
cp -r <子仓库路径>/* <主仓库路径>/目标目录/
复制代码
提交更改
:
cd <主仓库路径>
git add .
git commit -m "Manually merge sub-repo content"
复制代码
优点:
简朴直接,恰当文件较少的场景。
可以自由选择须要的文件。
缺点:
不生存子堆栈的汗青记录。
假如文件较多,容易堕落。
方法 2:使用 git filter-branch 或 git filter-repo
假如须要生存子堆栈的完备汗青记录,并将其完备地归并到主堆栈中,可以使用 git filter-branch 或更当代的 git filter-repo 工具来重写子堆栈的汗青,使其看起来像是从主堆栈中分离出来的。
操纵步调(以 git filter-repo 为例):
安装 git filter-repo
:
pip install git-filter-repo
复制代码
重写子堆栈的汗青
:
cd <子仓库路径>
git filter-repo --path <子仓库中的目标目录> --to-subdirectory-filter <主仓库中的目标目录>
复制代码
这会将子堆栈的汗青重写,使其看起来像是从主堆栈的某个目次中分离出来的。
将重写后的子堆栈归并到主堆栈
:
cd <主仓库路径>
git remote add sub-repo <子仓库路径>
git fetch sub-repo
git merge sub-repo/main
复制代码
优点:
完备生存子堆栈的汗青记录。
机动性高,可以重写汗青。
缺点:
操纵复杂,须要安装额外工具。
假如子堆栈和主堆栈有辩说,办理起来大概比力贫困。
方法 3:使用 git archive 和 git apply
假如只须要子堆栈的最新状态,而不须要生存汗青记录,可以使用 git archive 将子堆栈的当前状态导出为一个压缩包,然后在主堆栈中解压并提交。
操纵步调:
导出子堆栈的当前状态
:
cd <子仓库路径>
git archive --format=tar HEAD | gzip > ../sub-repo.tar.gz
复制代码
在主堆栈中解压并提交
:
cd <主仓库路径>
tar -xzf ../sub-repo.tar.gz -C <目标目录>
git add <目标目录>
git commit -m "Merge sub-repo content"
复制代码
优点:
简朴快速,只涉及当前状态。
不须要复杂的归并操纵。
缺点:
不生存子堆栈的汗青记录。
方法 4:使用 git subtree 的 --rejoin 选项
假如你之前使用 git subtree split 拆分了子堆栈,而且现在渴望将拆分后的子堆栈重新归并回主堆栈,可以使用 --rejoin 选项。
操纵步调:
归并子堆栈
:
cd <主仓库路径>
git subtree add --prefix=<目标目录> <子仓库路径>/.git main --squash --rejoin
复制代码
--rejoin 选项会实验规复拆分时的汗青记录,使得归并后的主堆栈汗青更加完备。
优点:
生存子堆栈的汗青记录。
操纵相对简朴。
缺点:
假如子堆栈和主堆栈的目次结构有辩说,大概须要手动办理。
固然,除了前面提到的几种方法,另有一些其他方式可以将当地子堆栈的内容归并到主堆栈中。这些方法大概更恰当特定场景或需求,以下是一些增补方案:
方法 6:使用 git read-tree 和 git merge-tree
git read-tree 和 git merge-tree 是 Git 的底层下令,可以用来直接操纵树对象(tree objects)。这种方法恰当须要手动处置处罚归并辩说或须要更细粒度控制的场景。
操纵步调:
在主堆栈中创建一个新的分支
:
cd <主仓库路径>
git checkout -b merge-subrepo
复制代码
将子堆栈的最新提交引入主堆栈
:
git remote add sub-repo <子仓库路径>
git fetch sub-repo
复制代码
使用 git read-tree 将子堆栈的树对象读入主堆栈的索引
:
git read-tree --prefix=<目标目录>/ sub-repo/main
复制代码
这会将子堆栈的文件树加载到主堆栈的索引中,并放置在指定的目次下。
归并更改并办理辩说
:
git checkout main
git merge -X theirs merge-subrepo
复制代码
假如使用 git merge-tree,可以手动处置处罚归并辩说:
git merge-tree $(git merge-base main merge-subrepo) main merge-subrepo
复制代码
提交更改
:
git add .
git commit -m "Merge sub-repo content using read-tree"
复制代码
优点:
提供了更底层的控制,恰当复杂的归并场景。
可以手动处置处罚归并辩说。
缺点:
操纵较为复杂,须要对 Git 的底层机制有肯定相识。
方法 7:使用 git subtree 的 --onto 选项
假如你须要将子堆栈的内容归并到主堆栈的某个特定分支或提交上,可以使用 git subtree 的 --onto 选项。
操纵步调:
在主堆栈中添加子堆栈
:
cd <主堆栈路径>git remote add sub-repo <子仓库路径>
git fetch sub-repo
复制代码
使用 git subtree 归并子堆栈到指定分支
:
git subtree add --prefix=<目标目录> --onto=<主仓库分支名> sub-repo/main --squash
复制代码
比方,将子堆栈的内容归并到主堆栈的 feature 分支:
git subtree add --prefix=subdir --onto=feature sub-repo/main --squash
复制代码
优点:
提供了更机动的归并目标选择。
生存了子堆栈的汗青记录(可选)。
缺点:
假如主堆栈和子堆栈的目次结构辩说较多,大概须要手动办理。
方法 8:使用 git subtree 的 --rejoin 和 --onto 组合
假如你之前使用 git subtree split 拆分了子堆栈,而且现在渴望将拆分后的子堆栈重新归并到主堆栈的某个特定分支上,可以团结使用 --rejoin 和 --onto 选项。
操纵步调:
在主堆栈中添加子堆栈
:
cd <主堆栈路径>git remote add sub-repo <子仓库路径>
git fetch sub-repo
复制代码
归并子堆栈到主堆栈的指定分支
:
git subtree add --prefix=<目标目录> --onto=<主仓库分支名> sub-repo/main --squash
--rejoin
复制代码
比方,将子堆栈的内容归并到主堆栈的 develop 分支:
git subtree add --prefix=subdir --onto=develop sub-repo/main --squash --rejoin
复制代码
优点:
生存了子堆栈的汗青记录。
可以将子堆栈的内容归并到主堆栈的恣意分支。
缺点:
假如主堆栈和子堆栈的目次结构辩说较多,大概须要手动办理。
方法 9:使用 git format-patch 和 git am
假如你只须要将子堆栈的某些提交归并到主堆栈中,可以使用 git format-patch 将子堆栈的提交导出为补丁文件,然后在主堆栈中应用这些补丁。
操纵步调:
在子堆栈中天生补丁文件
:
cd <子仓库路径>
git format-patch <起始提交>..<结束提交> -o ../patches
复制代码
这会将指定范围的提交导出为补丁文件,生存到 ../patches 目次中。
在主堆栈中应用补丁
:
cd <主仓库路径>
git am ../patches/*.patch
复制代码
优点:
可以选择性地归并特定提交。
生存了提交的汗青记录。
缺点:
假如补丁文件较多,操纵大概比力繁琐。
假如主堆栈和子堆栈的文件路径辩说,大概须要手动办理。
方法 10:使用 git worktree 和 git merge
假如你须要在主堆栈中临时创建一个工作树(worktree),并将其与子堆栈的内容归并,可以使用 git worktree 和 git merge。
操纵步调:
在主堆栈中创建一个新的工作树
:
cd <主仓库路径>
git worktree add ../main-repo-worktree <目标分支>
复制代码
在工作树中归并子堆栈的内容
:
cd ../main-repo-worktreegit remote add sub-repo <子仓库路径>
git fetch sub-repo
git merge sub-repo/main
复制代码
办理辩说并提交更改
:
git add .
git commit -m "Merge sub-repo content using worktree"
复制代码
将更改推回主堆栈
:
git push origin <目标分支>
复制代码
优点:
提供了独立的工作环境,恰当复杂的归并操纵。
可以在不影响主堆栈的环境下举行测试。
缺点:
操纵较为复杂,须要管理多个工作树。
总结
以上是几种增补的归并方法,每种方法都有实在用场景和优缺点。你可以根据详细需求选择符合的方法:
假如须要生存汗青记录,可以使用 git subtree 的 --rejoin 或 git filter-repo。
假如只须要当前状态,可以使用 git archive 或手动复制文件。
假如须要选择性归并提交,可以使用 git cherry-pick、git rebase 或 git format-patch。
假如须要更机动的工作环境,可以使用 git worktree。
渴望这些方法能资助你更机动地完成子堆栈到主堆栈的归并!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
瑞星
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表