随笔 - 121  文章 - 1  评论 - 8  阅读 - 20万

git 分离子仓库

将现有 git repo 中的子目录独立为新 repo,并保留其相关的提交历史。

git subtree

  1. 将 folder路径对应的所有提交信息 保存为一个新分支
git subtree split -P <folder> -b <new-branch>
  1. 将新分支保存为一个单独项目
mkdir <repo>
git init

git pull <path> <name-of-new-branch>

git filter-branch

1. 克隆一份项目到新路径, 并删除远程分支

git clone <big-repo> <new-repo>
cd <new-repo>
git remote rm origin

2. 过滤所有历史提交,只保留所有对指定子目录有影响的提交,并将该子目录设为该仓库的根目录

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter <name-of-folder> -- --all

--tag-name-filter 该参数控制我们要如何处理旧的 tag,cat 即表示原样输出;
--prune-empty 删除空的(对子目录没有影响的)提交;
--subdirectory-filter 指定子目录路径;
-- --all 该参数必须跟在 -- 后面,表示对所有分支进行操作。如果你只想保存当前分支,也可以不添加此参数。

3. 删除 历史提交中的 无用数据

git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now

4 清理原仓库中 分离的数据

git rm -rf <name-of-folder>
# 提交一下说明对应操作
git commit -m 'Remove some'
# 删除刚才创建的临时分支
# 后一种方法不需要执行这一步
git branch -D <name-of-new-branch>

5. 关联原仓库与新仓库

git commit -m "first commit"
git remote add origin <remote-path>
git push -u origin master
posted on   listenerln  阅读(137)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示