GIT更新子树:我如何更新我的子树?

5
我们有几个仓库,例如:
Site1:
- lib:
Site2:
- lib: lib:
如您所见,lib在两个站点中共享。现在当我使用
[master] git fetch lib

什么也没有发生。 之后我使用:

[master] git merge --squash -s subtree --no-commit lib

然后它开始删除属于该站点的大量文件。

如果我尝试这样做: 从共享库远程更新库子项目 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.

然后只需切换到主分支,运行以下命令:
git merge --squash -s subtree --no-commit lib

这只是从我的网站上删除了许多文件,而且还留下了一些文件,就像它在lib的子文件夹中一样。 为什么不将lib更新到正确的版本,同时保留网站的文件呢? 重置后,我确实恢复了我的项目。
git reset --hard origin/master

我该如何更新库?

已设置远程分支。

$ git remote -v
lib     https://github.com/***/lib.git (fetch)
lib     https://github.com/***/lib.git (push)
1个回答

9
考虑到您已经在应用程序中设置了子树(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 repo。
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)

我能只用本地分支来完成这个操作吗?不需要推送或拉取吗? - yucer
我也对此很感兴趣。我尝试过read-tree,但它无法处理“重叠”的文件... - marscher
1
抱歉各位,我已经好几年没有使用这个 Git 结构了,不认为我能再提供更多帮助,真的很抱歉。 - Miguelgraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接