首页 > 解决方案 > 如何正确更新 git 子树

问题描述

假设我有一个存储库 Repo,现在我想添加文件夹 Common 这是单独的存储库。所以结构应该如下:

Repo
    myfile.txt
    Common
        anotherfile.txt

据我所知,至少有两种方法可以做到这一点:subtreessubmodules。在阅读了一些 git 教程和手册后,我得出结论,子树就是我想要的。

好的,所以我已将该文件夹添加到我的存储库中:

git subtree add --prefix Common https://github.com/my/Common.git master --squash

好的,现在看起来和预期的一样。一段时间后,我想更新子树文件夹。但不幸的是,到目前为止我发现的唯一方法是:

git subtree pull --prefix Common https://github.com/my/Vommon.git master --squash

为什么我要再次输入存储库 URL?那不是存储在git结构中的某个地方吗?如果我有几个子树怎么办?我不认为有人记得所有的网址。

有没有办法以某种简单的方式做到这一点?也许我错过了什么?

标签: gitgit-subtree

解决方案


为什么我要再次输入存储库 URL?那不是存储在git结构中的某个地方吗?

没有。URL 与子模块一起存储,但不与子树一起存储。子树完全集成到存储库中,它不记得它是一个单独的子树,它不记得它来自哪里。

如果我有几个子树怎么办?

创建 git 别名或 shell 别名或脚本来拉/推许多子树。

或者切换回子模块。它们有很多缺点,但至少它们记得它们是从哪里克隆的。


推荐阅读