使用git subtree管理子项目 v2

目录

之前一篇文章使用 git subtree 命令创建子项目,参见《使用git subtree管理子项目》。Git 官方文档和 Github 的使用帮助中给出另外一种使用subtree创建子目录的方法,不再使用 git subtree 命令,而在 pull 中使用 subtree 策略。

与前文相似,下面在 nwpc-monitor-platform 项目中添加子项目 nwpc-hpc-model。

建立关联

在 nwpc-monitor-platform 中添加 nwpc-hpc-model 为远程分支。

/d/windroc/project/monitor/nwpc-monitor-platform (master)
$ git remote add -f hpc-model git@github.com:perillaroc/nwpc-hpc-model.git
Updating hpc-model
Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa':
From github.com:perillaroc/nwpc-hpc-model
 * [new branch]      master     -> hpc-model/master

将 hpc-model 分支的历史合并到 master 分支中,这一步不改变本地文件,但可以为后续操作提供支持。

/d/windroc/project/monitor/nwpc-monitor-platform (master)
$ git merge -s ours --no-commit --allow-unrelated-histories hpc-model/master
Automatic merge went well; stopped before committing as requested

在 nwpc-monitor-platform 创建子项目的目录 nwpc-hpc-model。

/d/windroc/project/monitor/nwpc-monitor-platform (master|MERGING)
$ git read-tree --prefix=vendor/nwpc-hpc-model -u hpc-model/master

此时会创建 vendor/nwpc-hpc-model 目录,该目录就是nwpc-hpc-model子项目。

提交改动

/d/windroc/project/monitor/nwpc-monitor-platform (master|MERGING)
$ git commit
[master 554a2d4] Merge remote-tracking branch 'hpc-model/master'

获取更新

直接更新 hpc-model 分支,并与 master 合并。

/d/windroc/project/monitor/nwpc-monitor-platform (master)
$ git pull -s subtree hpc-model master
Enter passphrase for key '/c/Users/wangdp/.ssh/id_rsa':
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0
Unpacking objects: 100% (5/5), done.
From github.com:perillaroc/nwpc-hpc-model
 * branch            master     -> FETCH_HEAD
   e2b4f42..74b2af9  master     -> hpc-model/master
Merge made by the 'subtree' strategy.
 vendor/nwpc-hpc-model/nwpc_hpc_model/loadleveler/value_saver.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

此时会将hpc-model整个历史合并到master中,后面会试一下--squash参数,不再保留子项目的提交记录。

参考

About Git subtree merges