git - 克隆使用子树的 Git 存储库的过程

标签 git subtree

我正在使用 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/

相关文章:

git - 查找 Git 存储库的名称

git - 使用 SmartGit 将功能分支 merge 到开发中

git 报告 merge 冲突,没有更改,空行(使用 git-subtree)

neo4j - 在 Neo4j 中递归匹配子树

git - 当我们使用子树 merge 策略时,git如何找到子树?

c++ - 如何从 Boost.PropertyTree 复制子树

git - 企业情况下如何在Git中管理一个软件的版本?

git - 我可以将一个文件中的更改分成两次提交吗?

git - 无法访问远程存储库以导入 Go 模块

git - 如何更改 Git 子树 merge 的来源