拆分大的git库到多个独立git库
来源:互联网 发布:网络文化节有哪些活动 编辑:程序博客网 时间:2024/06/07 09:57
经常会在做一个项目时,随着功能的增加,项目的源代码越来越庞大,在某一天,终于受不了,决定要拆分代码到多个独立的模块。
这时候,如果你是用git来管理源代码,事情就简单多了,使用git的filter-branch工具,可以快速的把子目录分离为一个独立库,而且还能保留修改历史。
当然,使用svn或者其他代码仓库的,也不要灰心,可以先转换为git库再处理,
git的filter-branch有一个index-filter,可以让你按任意策略重新定义整个源代码目录树结构和文件内容。git手册中的例子是删除所有提交的某一个文件,只能算是index-filter的牛刀小试,这里要完成的任务才能基本体现index-filter的强大。
比如,有这样一个目录结构:
/
- include
- module-A
- module-B
- src- module-A
- module-B
根目录下有include、src、make三个子目录,分别用于存放头文件、实现文件,这是一个比较典型目录结构,每个子目录下又按模块划分了很多子目录。现在目标是将模块独立,形成下面的目录结构,(模块A、B都是这样的结构):
/
- include
- src
别忘了,这个项目还有好几个分支,比如branch-1、branch-2。看起来事情蛮复杂的,需要好好规划一下。
首先按照每个模块、每个分支建立对应分支,如:module-A/branch-1、module-A/branch-2、module-B/branch-1 module-B/branch-2,建立的分支与一开始原先的分支位于同一个提交(commit)上。
然后,通过index-filter修改目录结构。
用module-A/branch-1为例,需要将 include/module-A移动到 include目录,将 src/module-A移动到 src目录,所以index-filter的脚步应该这样写:
filter.sh:
#!/bin/bashgit read-tree --emptygit read-tree --prefix=/include ${GIT_COMMIT}:include/module-Agit read-tree --prefix=/src ${GIT_COMMIT}:src/module-A调用index-filter的命令行为:
git filter-branch -f --index-filter filter.sh module-A/branch-1filter.sh需要可执行权限。
应为原先git库的每次修改一般只针对一个模块,所以通过index-filter处理后,新的分支上有很多提交是空的,也就是没有修改代码。这时候,可以通过commit-filter删除空提交,命令为:
git filter-branch -f --commit-filter 'git_commit_non_empty_tree "$@"' module-A/branch-1好了,一个分支处理完了,剩下的三个分支类似处理。
这样,对应于module-A,有module-A/branch-1、module-A/branch-2,我们需要将这两个分支分离到独立的库中,可以这样做:
git init --bare ../module-A.gitgit push ../module-A.git refs/heads/module-A/*:refs/heads/*最后从module-A.git中克隆出来,就是module-A独立的代码了。
git clone module-A.git
- 拆分大的git库到多个独立git库
- Windows下,将Git项目拆分并独立
- git 版本库拆分和subtree用法
- git 拆分项目 子目录
- git中处理两个独立库独立分支合并出现的冲突
- 创建Git独立分支
- 创建Git独立分支
- git的一大优点
- 如何把GIT仓库的子目录独立为子模块
- 如何把GIT仓库的子目录独立成新仓库
- git推送新的独立分支(branch)
- 总结大中小型项目的git流程
- Git 三大区域的操作分析
- 【git】git的分支
- 【git】-git的特点
- Git Submodule管理项目子模块 使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的
- git错误大汇总
- Git-大总结
- 一个带有超级罗嗦注释的-------JS表单验证
- 并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别
- Android开发学习框架目录(要掌握的核心内容)
- socket中的bind函数
- UML_用例图
- 拆分大的git库到多个独立git库
- 蓝牙4.0BLE国内市场开始发力,2014年产品规划
- 关于旅游,读书笔记
- Uniform Generator uva
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
- Eclipse快捷键 10个最有用的快捷键
- 设计模式之简单工厂模式(Simply Factory)摘录
- LDMFD
- 我初步了解的dfs