我们有几个回购:
站点1:
站点2:
lib目录下:
如您所见,lib在两个站点中共享.现在我用的时候
[master] git fetch lib
Run Code Online (Sandbox Code Playgroud)
什么都没发生.之后我使用:
[master] git merge --squash -s subtree --no-commit lib
Run Code Online (Sandbox Code Playgroud)
然后它开始删除属于该站点的文件的负载.
如果我尝试这样做:从共享库远程更新库子项目 http://www.codeproject.com/Articles/562950/GitplusSubtreeplusMergeplus-e2-80-93TheplusQuickpl
[master] git checkout lib
Checking out files: 100% (4521/4521), done.
Switched to branch 'lib'
[lib] git pull
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
然后只需结帐到主服务器,然后运行命令:
git merge --squash -s subtree --no-commit lib
Run Code Online (Sandbox Code Playgroud)
这只是从我的站点中删除了一大堆文件,并在lib的子文件夹中留下了一些类似文件的文件.为什么这样做只是将lib更新为正确的版本?并保留网站的文件?
重置后,我确实得到了我的项目
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
我该如何更新lib?
有一个远程分支设置.
$ git remote -v
lib https://github.com/***/lib.git (fetch)
lib https://github.com/***/lib.git (push)
Run Code Online (Sandbox Code Playgroud)
考虑到您已经在app(git remote add subtree_name git@github.com:user/subtree_proj.git)中设置了子树,您必须:
1-子树拆分
git subtree split -P lib -b new_branch_to_split其中lib是子树项目的路径,并且new_branch_to_split只包含您的lib代码,并将被推送到您的lib仓库.
2-子树推
git push subtree_name new_branch_to_split:original_subtree_branch(i.e. master)
要么
git push subtree_name new_branch_to_split:master
3-始终删除临时分支
git branch -D new_branch_to_split
4-拉动使用子树项目的其他项目中的更改
git subtree pull -P lib subtree_name original_subtree_branch(i.e. master)