4

我们有一些类似的回购:

站点1:

  • 库:

站点2:

  • 库:

库:

如您所见,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)
4

1 回答 1

5

考虑到您已经在应用程序 ( 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)

于 2013-09-06T18:51:38.693 回答