插件回购的子模块或.gitignore?

时间:2013-05-02 09:03:44

标签: git github

我已经检查了几个答案,但似乎没有一个人能够看到我正在看的东西(或者对我来说没有任何意义)。

我正在开发一个项目,例如Wordpress模型:

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

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

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

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

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

没有链接的方式(例如,当我提交核心时,我没有给出插件处于什么状态。我只是假设在处理核心时插件不存在。)< / p>

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

类似的问题:

Use gitignore to nest repositories.

Do you ignore a git submodule in your .gitignore or commit it to your repo?

What is the advantage of using git submodules over having a repo inside another repo with a gitignore?

2 个答案:

答案 0 :(得分:4)

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

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

  

当我提交核心时,我没有给出插件处于什么状态。我宁愿假设在处理核心

时插件不存在

你可以毫无问题地使用子模块 提交和推送core时,唯一的附加步骤是返回父仓库,提交并推送(为了记录新的core SHA1)。 有关“True nature of submodules”的过程的更多信息。

答案 1 :(得分:0)

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

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

为了解决这个问题,我调整了engine文件夹,在我的gemfile中,我将其设置为在github上使用引擎的远程副本。这样,如果我以后克隆它,就没有我缺少的依赖项。如果我想在主应用程序中立即看到本地更改,我将gem文件切换为使用本地版本的引擎,但在我提交之前将其切换回来。

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