首页 > 解决方案 > 使用 EXACT 文件夹结构创建包含子模块的 EXACT git 存储库并将其推送到 github

问题描述

我认为我的可能是 git 子模块的最简单用例。

我有一个目录结构

<project-name>
 ---<directory1>
 ---<directory2>
 ---<directory3>
        ---<directory3.1>

每个子目录都是一个 git 存储库。我只想跟踪在我的<project-name>目录中添加的不同 git 存储库,这是我的主要(或超级)存储库。

我已经想出了如何将这些 git 存储库中的每一个作为子模块添加到我的超级存储库中,这也是一个包含它们的目录。在当地,我有我想要的。

所以一些git子模块是我超级仓库里面的两个深度,只要我用

git submodule add <relative-path-to-submodule> <relative-path-to-submodule>

它照顾得很好。

为什么我想这样做?因为这代表了 CFD 框架 (OpenFOAM) 中的常规本地目录结构,所以我正在开发我的代码。

我和其他人分别开发不同的子模块,单独跟踪每个子模块/子目录绝对有价值。

目标是让我的最终用户克隆我的代码存储库,更改名称并开始编译和使用代码。(按照惯例,建造非常简单)

我只是不知道如何将所有代码推送到 github,包括
子模块中的实际文件作为该特定子目录中的文件。

显然,当我推送到 github 时,子模块只是显示为提交,没有推送来自该子目录的实际代码。

我不想(不能)想在超级存储库中添加子目录。所有答案都告诉我这样做,这是没有意义的。

我找到了没有答案的确切问题(Git: Push a local git submodule, including submodule files, to a remote bare repository

标签: gitgithubgit-submodules

解决方案


我只是不知道如何将所有代码推送到 github,包括子模块中的实际文件作为该特定子目录中的文件。

首先,不要使用子模块,它们不适合你想做的事情。

其次,尝试子树方法:我解释了submodule 和 subtree 之间的区别,并在此处说明了 subtree

看:

git subtree允许您将一个存储库作为子目录嵌套在另一个存储库中。它是 Git 项目管理项目依赖项的几种方式之一。

https://wac-cdn.atlassian.com/dam/jcr:f5fcef58-5b93-4ff4-b9a1-3f721d29ead8/BeforeAfterGitSubtreeDiagram.png?cdnVersion=685


推荐阅读