在git项目中引用另一个git项目

适用场景

各个项目共用一个库,而这个库正在快速迭代更新的过程中。

操作

假设有项目P1、P2,同时共用项目S的代码。

添加remote

在P1项目中添加S项目的remote地址

git remote add jupyter git@git.coding.net:MrChi/JupyterNotes.git

引用

在P1项目中引用S项目代码:

git subtree add --prefix=<本地子项目目录> <远程库仓库地址|远程库别名> <分支名> --squash
  • prefix 参数指定存放S项目的路径,建议使用相对于P1项目根目录的相对路径;
  • squash 参数:默认情况下,P1项目会合并S项目本身所有的提交记录,使用该参数可以合并子项目的提交记录为一条;

操作后,在P1项目中会产生一条commit记录。

例如:

git subtree add --prefix=jupyternotes jupyter master

更新

在P1项目中更新引用的S项目的代码

git subtree pull --prefix=<prefix> <repository> <ref>

提交

在P1项目中向S项目提交在P1中进行的更改

git subtree push --prefix=<prefix> <repository> <ref>

优势和劣势

优势

对于P1项目来说,S项目的代码是透明的,只是一个普通目录,不需要做特殊处理;只需要维护subtree的人在合适的时候将代码同步到S项目即可。

劣势

subtree的这种方式,只使用了分支,对版本不能进行有效的控制。如果S项目更新了代码但与P1项目不兼容,P1项目更新后就可能会出现问题。

如果追求稳定,可以给S项目单独拉出一个版本分支,例如“v1.0”,subtree只使用这个分支即可。

参考链接

目录