我正在使用 Git 的子树命令将几个库 pull 入一个项目。
如果我随后以正常方式克隆项目,我最终会得到我需要的所有代码,但我失去了子树关系 - 在克隆中,每个库都没有远程,也没有 -为它们中的任何一个推送分支。
重新建立此连接的最佳方法是什么?
做的够不够
git remote add <lib> <remote-url>
git fetch <lib>
如果我是第一次添加库,我会按照以下方式添加:
git subtree add -P <local/lib> --squash "<lib>/master"
当本地目录已经存在时这不起作用,当然当您克隆了一个已经添加了库的项目时它会起作用。
在这种情况下,还有什么应该做的,以确保后续的 git subtree merge 和 git subtree split 命令符合预期吗?
最佳答案
我遇到了非常相似的问题
这是我最初创建子树的方式
git remote add -f sub_project url_to_remote_repository/project.git
git merge -s ours --no-commit sub_project/master
git read-tree --prefix=sub/project/ -u sub_project/master
git commit -m "Added subtree merged in sub/project"
为了从“项目”仓库中获取更改,我正在做
git pull -s subtree sub_project master
现在,我将我的本地存储库推送到 github 我从另一台机器上克隆了我的 github 存储库 那时,我在 sub/project 中得到了所有预期的文件……太好了。 但不再遥远,与子/项目的关系。 所以我做了以下
git remote add -f sub_project url_to_remote_repository/project.git
git merge -s ours --no-commit --squash sub_project/master
git pull -s subtree sub_project master
而且效果很好。现在我可以像以前一样从那个克隆的存储库管理子树
git pull -s subtree sub_project master
注意:
1) 在我们的项目中,在我们使用 git 子模块之前,这对我们的用户来说确实不好。这就是我们切换到 git 的子树系统的原因。
2) 我在 Windows 机器上执行这些操作时遇到了一些奇怪的错误(使用 git 版本 1.7.9.msysgit.0 ),并且在 linux 上成功执行了相同的操作。
所以现在,为了操作子树,我经常使用 linux(如果有任何错误,我会在 linux 上尝试相同的操作)。
希望对您有所帮助。
关于git - 克隆使用子树的 Git 存储库的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202674/