使用git subtree管理子项目
目录
已有更新版本,请参看《使用git subtree管理子项目 v2》
某个项目同时被多个项目使用,并且该项目也同时在开发,就需要在一个git项目(比如web-A)中嵌入另一个git项目(lib-B),并有如下的需求:
- 项目 web-A 中某个子目录内容与项目 lib-B,可以获取 lib-B 的更新,合并到项目 web-A 中。
- 可以在项目 web-A 中编辑项目 lib-B 的文件,并将该改动推送到项目 lib-B 中。
使用 git subtree 可以实现上述功能。
下面在 nwpc-monitor-platform 项目中添加子项目 nwpc-work-flow-model。
建立关联
在 nwpc-monitor-platform 中添加 nwpc-work-flow-model 为远程分支。
$ git remote add -f nwpc-work-flow-model git@github.com:perillaroc/nwpc-work-flow-model.git Updating nwpc-work-flow-model warning: no common commits remote: Counting objects: 135, done. remote: Compressing objects: 100% (69/69), done. Receiving objects: 53% (72/135)remote: Total 135 (delta 66), reused 132 (delta 63), pack-reused 0 Receiving objects: 100% (135/135), 26.91 KiB | 0 bytes/s, done. Resolving deltas: 100% (66/66), done. From github.com:perillaroc/nwpc-work-flow-model * [new branch] master -> nwpc-work-flow-model/master
在 nwpc-monitor-platform 创建子项目的目录 nwpc_work_flow_model
wangdp@wangdp-PC MINGW64 /d/windroc/project/nwp/monitor/nwpc-monitor-platform (master) $ git subtree add --prefix nwpc_work_flow_model nwpc-work-flow-model master --squash git fetch nwpc-work-flow-model master Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa': From github.com:perillaroc/nwpc-work-flow-model * branch master -> FETCH_HEAD Added dir 'nwpc_work_flow_model'
nwpc_work_flow_model 目录就是子项目 nwpc-work-flow-model。
获取更新
wangdp@wangdp-PC MINGW64 /d/windroc/project/nwp/monitor/nwpc-monitor-platform (master) $ git fetch nwpc-work-flow-model master Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa': remote: Counting objects: 4, done. remote: Compressing objects: 100% (1/1), done. remote: Total 4 (delta 3), reused 4 (delta 3), pack-reused 0 Unpacking objects: 100% (4/4), done. From github.com:perillaroc/nwpc-work-flow-model * branch master -> FETCH_HEAD 0bc669e..974c724 master -> nwpc-work-flow-model/master wangdp@wangdp-PC MINGW64 /d/windroc/project/nwp/monitor/nwpc-monitor-platform (master) $ git subtree pull --prefix=nwpc_work_flow_model nwpc-work-flow-model master --squash Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa': From github.com:perillaroc/nwpc-work-flow-model * branch master -> FETCH_HEAD Merge made by the 'recursive' strategy. nwpc_work_flow_model/sms/visitor.py | 5 +++++ 1 file changed, 5 insertions(+)
项目版本关系如下:
推送更新
wangdp@wangdp-PC MINGW64 /d/windroc/project/nwp/monitor/nwpc-monitor-platform (master) $ git subtree push --prefix=nwpc_work_flow_model nwpc-work-flow-model master git push using: nwpc-work-flow-model master Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa': Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 373 bytes | 0 bytes/s, done. Total 4 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To github.com:perillaroc/nwpc-work-flow-model.git 974c724..782c83c 782c83ca132f8019b79dee597370919a37dedd5d -> master
