添加现有的repo为Git Subtree

前一篇讲述了从现有项目中拆分subtree的步骤,这一篇说一下如何把一个现有的项目当成subtree加到当前项目中来。

1. Add Remote

我们先把要添加的subtree repo添加为remote,这样能简化后续的操作命令。

git remote add sub_origin GIT_REMOTE_REPO
git fetch sub_origin

2. Add Subtree

git subtree add --prefix=local/subtree/path GIT_REMOTE_REPO branch来添加subtree

git subtree add --prefix=/path/to/sub sub_origin master --squash

--squash参数表示将subtree repo中的提交记录合并成一次commit,这样就不用拉取子项目的完整历史记录。

也有用read-tree来把子repo添加进来的,比如

git merge -s ours --no-commit sub_origin/master
git read-tree --prefix=/path/to/sub -u sub_origin/master
git commit -m "Import sub as a subtree"

3. 更新subtree

将远程repo的代码拉取下来

git pull -s subtree sub_origin master --allow-unrelated-histories --squash

或者用git subtree pull来更新

git subtree pull --prefix=/path/to/sub sub_origin master --squash

这样会有2个commit,一个是squash的commit,一个是merge的commit。 如果不加--squash参数的话会报错fatal: refusing to merge unrelated histories。因为目前git subtree命令还不支持--allow-unrelated-histories参数。

4. 改动代码,更新

之后可以正常的写代码了,等到需要更新subtree的代码的时候把更新push上去就可以了。

git subtree push --prefix=/path/to/sub sub_origin master