频道栏目
首页 > 资讯 > Linux > 正文

git版本库拆分

17-08-15        来源:[db:作者]  
收藏   我要投稿

程序员最爽的事情是什么?删删删!所有项目本来都很苗条的,时间长了难免有一些越搞越大,怎么看怎么不爽,一个字,拆!今天就说说拆分 Git 仓库这件小事儿。

这个拆字呢,有两种写法,比如你有一个叫做 big-project 的仓库,目录如下:

big-project
├── codes-a
├── codes-b
└── codes-eiyo
有时候想把 codes-eiyo 拆出来做为一个独立仓库;有时候是想把 codes-eiyo 清理掉,只保留剩下的代码在仓库中。现在就来分别看看这两件事情怎么干:

拆分一个子目录为独立仓库
以前是用 filter-branch 来实现,这个需求太常见了,有人做了个整合的 git-subtree,再后来……subtree 集成进 Git 了。

这就是那个大仓库 big-project

$ git clone git@github.com:tom/big-project.git
$ cd big-project

把所有 codes-eiyo 目录下的相关提交整理为一个新的分支 eiyo

$ git subtree split -P codes-eiyo -b eiyo

另建一个新目录并初始化为 git 仓库

$ mkdir ../eiyo
$ cd ../eiyo
$ git init

拉取旧仓库的 eiyo 分支到当前的 master 分支

$ git pull ../big-project eiyo

清除一个子目录下所有内容和记录
这个还是要用万能的 filter-branch:

还是那个大仓库 big-project

$ git clone git@github.com:tom/big-project.git
$ cd big-project

清理 master 分支上所有跟 codes-eiyo 目录有关的痕迹

$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch codes-eiyo" --prune-empty master

另建一个新目录并初始化为 git 仓库

$ mkdir ../big-project-fresh
$ cd ../big-project-fresh
$ git init

拉取 big-project 的 master 分支(到新仓库的 master 分支)

$ git pull ../big-project master
Before & After

记得用 count-objects 命令比较新旧仓库的差异(爽爽爽):

$ git count-objects -vH

接下来要推送给新的远端仓库什么的就随你便了~

$ git remote add origin git://github.com:tom/fresh-project.git
$ git push origin -u master
相关TAG标签
上一篇:Linux中top显示的信息详解
下一篇:sql语句快速清空表
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站