微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用 git submodule 命令导入另一个存储库的子集吗?

如何解决我可以使用 git submodule 命令导入另一个存储库的子集吗?

我正在处理一个需要导入一些开源库的 Godot 项目。这些库都共享一个特定的文件夹结构,这意味着我无法使用 git submodule add 直接导入项目。

这是一个这样的图书馆。我创建了自己的 official repo 分支并在导入之前对其进行了修改。官方回购看起来像这样。我想从此库中导入 quentincaffeino-console 文件夹并将其添加到我的项目的 addons 文件夹中。 (我不想直接将文件签入我的存储库,我宁愿将它们分开。)

godot-console
├───assets*
├───gdscript-docs-maker*
└───godot*
    ├───addons
    │   └───quentincaffeino-console -- I want to import this folder only
    │       └───src                 --    (and subfolders,of course)
    ├───assets*
    ├───demo*
    └───etc...

* These folders contain unit tests,docs,etc. but should NOT be a part of my project

我的解决方案是创建 my own fork删除所有单元测试和基础架构文件,并将 addons 文件夹的内容移动到存储库的根目录:

quentincaffeino-console
    └───src

现在我可以将库作为子仓库添加my project

Demo
├───addons
│   ├───quentincaffeino-console -- Created with "git submodule add https://github.com/SdgGames/godot-console"
│   │   └───src
│   ├───gut                     -- Another submodule created the same way
│   ├───logger                  -- Another
│   └───sdggames-modloader      -- etc...
└───etc.

这有效,但似乎有点混乱,因为我现在必须使多个存储库分叉与其上游对应版本保持同步。有没有办法跳过中间步骤并使用 git submodule 或类似命令将我想要的文件夹拉入我的项目?

额外细节:

我发现了一些类似的问题 here herehere。我不是要导入的库的所有者/维护者,因此我无法直接修改该项目的结构。

此外,这是一个在 CICD 管道中运行的开源项目,所以我想让客户端易于理解。现在,我可以使用 git clonegit submodule --init 克隆我的项目。我会接受“git不能这样做”作为答案,我只是想听听专家的意见:-)

编辑:我刚刚发现 10 年前的 this answer 说“不,这是不可能的”,但最近的答案似乎表明并非如此。今天仍然如此吗? (如有重复,请见谅)

谢谢!

解决方法

今天仍然如此吗?

是的,今天仍然如此:一个子模块引用一个完整的存储库。

您可以configure a submodule to be sparse-checked out,以便仅显示其内容的一个子集(另请参阅this example)。

但在您的情况下,您仍然需要一个符号链接(符号链接)才能使 quentincaffeino-console 在您的主存储库中您想要的位置可见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。