4

我已经检查了几个答案,但似乎没有一个符合我正在查看的内容(或者对我来说不太有意义)。

我正在开发一个项目,该项目遵循以下 Wordpress 模型:

root/
root/core/
root/core/stuff
root/plugins
root/plugins/1
root/plugins/2

整个核心是一个 repo,插件 1、2 等......都是许多不同贡献者的独立 repo。

子模块似乎使问题复杂化-当我想要的只是能够

A)进行更改/推/拉核心

B)进行更改/推/拉插件

没有链接的方式(例如,当我向核心提交时,我不会翻转插件处于什么状态。我宁愿假设插件在核心上工作时不存在。)

简单地使用 .gitignore 来忽略整个 /plugins/ 目录不是最直接的吗?

类似的问题:

使用 gitignore 嵌套存储库。

您是否忽略 .gitignore 中的 git 子模块或将其提交到您的仓库?

使用 git 子模块与在另一个带有 gitignore 的 repo 中拥有 repo 相比有什么优势?

4

2 回答 2

4

子模块的想法是允许父存储库(root在您的情况下为文件夹)记录您在所述父存储库中提交某些内容时使用的子存储库的确切版本。

这将允许您克隆存储库,知道您将获得子存储库的兼容版本,并使用您当前的文件集。

当我对核心做出承诺时,我不会翻转插件处于什么状态。我宁愿假设在核心工作时插件不存在

您可以使用子模块毫无问题地做到这一点。
提交和推送时,唯一的附加步骤core是返回父仓库,在那里提交和推送(以记录新的coreSHA1)。
更多关于“子模块的真实性质”的过程。

于 2013-05-02T09:19:48.153 回答
0

我发现了一个使用 .gitignore 而不是学习子模块的非常好的用例。

我有一个由 rails 引擎组成的 rails 应用程序。唯一的问题是我设置生成器的方式,引擎需要存在于 rails 应用程序的文件结构中。如果您的 rails 引擎和您的 rails 应用程序位于不同的存储库下,它会变得非常混乱,因为当引擎更改时,您必须同时提交引擎和应用程序。

为了解决这个问题,我对引擎文件夹进行了 gitignored,并在我的 gemfile 中将其设置为使用 github 上引擎的远程副本。这样,如果我稍后将其克隆下来,就不会丢失任何依赖项。如果我想立即在主应用程序中查看本地更改,我将 gemfile 切换为使用引擎的本地版本,但在提交之前将其切换回来。

为了更好地回答您的问题,如果您可以在应用程序的依赖项中指定使用远程副本而不是 gitignored 本地副本,我认为使用 .gitignore 很好。

于 2014-10-03T19:03:49.217 回答