使用git subtree管理子项目

目录

已有更新版本,请参看《使用git subtree管理子项目 v2

某个项目同时被多个项目使用,并且该项目也同时在开发,就需要在一个git项目(比如web-A)中嵌入另一个git项目(lib-B),并有如下的需求:

  1. 项目 web-A 中某个子目录内容与项目 lib-B,可以获取 lib-B 的更新,合并到项目 web-A 中。
  2. 可以在项目 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

参考

使用GIT SUBTREE集成项目到子目录
Git 高级合并