使用git的subtree将已有项目的某个目录分离成独立项目


git在1.8版本后加入了subtree的功能,这个功能比之前的submodule功能强大很多,而且很好用,还是老版本的赶紧升级下吧。

一些使用方法可参见这个页面: http://aoxuis.me/posts/2013/08/07/git-subtree/

当一个项目在开发若干时间后,希望将某个目录单独出一个项目来开发,此时就可以利用这个subtree的功能分离里。

然而直接用git subtree add 的命令会出现 prefix ‘***’ already exists. 这样的错误提示,
这是因为对应的目录已经存在,不能直接添加,需要按下面的方式把对应的目录剥离开然后再加入subtree

具体的操作方式是这样的:
1. 首先cd到需要处理的项目的目录:

pushd  <big-repo >
git subtree  split  -P  <name-of-folder >  -b  <name-of-new-branch >     # 将需要分离的目录的提交日志分离成一个独立的临时版本
popd

2. 创建一个新的repo

mkdir  <new-repo >
pushd  <new-repo >

git init
git pull  path /to /big-repo >  <name-of-new-branch >

3. 连接的github

git remote add origin  < git @github.com:my-user /new-repo.git >
git push origin  -u master

其中第2, 3两步也可以直接clone已有的hub,这样做:

git clone  < git @github.com:my-user /new-repo.git >  <dir-of-tmp-repo >
git pull  path /to /big-repo >  <name-of-new-branch >
git push origin  -u master

4. 清理数据

popd  # get out of
pushd  <big-repo >

git rm  -rf  <name-of-folder >
git commit  -m  '移除相应模块'             # 提交删除申请
git branch  -D  <name-of-new-branch >      # 删除临时分支,也可以不移除,自己看情况

5. 添加subtree

git subtree add  -P  <name-of-folder >  < git @github.com:my-user /new-repo.git > master
git push origin master

执行到第3步时,对应的目录已经剥离出来形成独立的项目了。第4,5步主要是把当前项目的对应的文件给删除,可以不执行,以后可以通过

# 更新
git subtree pull  -P  <name-of-folder >  < git @github.com:my-user /new-repo.git > master

# 提交
git subtree push  -P  <name-of-folder >  < git @github.com:my-user /new-repo.git > master

来执行相应的subtree操作


转自:http://www.queyang.com/blog/archives/519

你可能感兴趣的:(管理)