如果git库目录是这样的:

git根目录
project_a/
project_b/
...

并且想为project_a单独创建一个代码库

# 拉一个新分支
git co -b project_a_repo # 重构本分支的log,将project_a目录提为根目录并去掉其他文件和log
git filter-branch -f --prune-empty --subdirectory-filter project_a/ # 将新的远端代码库添加到当前工作目录
git remote add project_a_origin git://xxxxxx # 将新的分支push到新的代码库的master分支
git push -f project_a_origin project_a_repo:master

大功告成,赶快clone一个新库看看

更复杂的情况

如果你的目录更复杂些,比如:

git根目录
include
project_a
project_b
src
project_a
project_b

想变成:

git根目录
include # 原来的include/project_a
src # 原来的src/project_a

只需要将之前的filter-branch命令改成:

git filter-branch -f --prune-empty --index-filter step.sh

然后新建一个step.sh,要有可执行权限,内容:

#!/bin/bash
git read-tree --empty 2>/dev/null # 将目录清空
git read-tree --prefix=include ${GIT_COMMIT}:include/project_a 2>/dev/null # 将include/project_a目录的内容放到include
git read-tree --prefix=src ${GIT_COMMIT}:src/project_a 2>/dev/null # 同上 exit 0

相当于git会重演一遍log,在每个commit重演后都执行一遍step.sh

参考资料 https://git-scm.com/docs/git-filter-branch/

最新文章

  1. 在visual studio2015中使用easyX画图
  2. 关于QT写注册表开机自启动
  3. AngularJS学习笔记1
  4. linux cross toolsChain 交叉编译 ARM(转)
  5. access应用分享
  6. linux common command.
  7. 爆出错误:The Geometry has no Z values
  8. python学习day7
  9. 简单谈谈JavaScript中的this
  10. latex编辑器
  11. webpack-dev-server 设置反向代理解决跨域问题
  12. Nginx+Tomcat动静分离及Nginx优化
  13. 给web请求加遮罩动画
  14. 【C++ Primer 第13章】1. 拷贝控制、赋值和销毁
  15. paramiko实现上传目录
  16. C++环境的配置( windows)
  17. Codeforces 757 C Felicity is Coming!
  18. Ajax的重构
  19. bzoj 1251: 序列终结者 平衡树,fhqtreap
  20. 为HTML表格添加交互功能------DataTables

热门文章

  1. 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
  2. Oracle之事务
  3. virtual-虚方法
  4. poj3254状压DP入门
  5. 使用CSS3+jquery.js 实现微信抽奖转盘效果
  6. C# XmlSerializer序列化浅析
  7. c#解析XML和JSON
  8. PclZip:强大的PHP压缩与解压缩zip类
  9. commons-lang使用
  10. append与remove的简单使用