我已经检查了几个答案,但似乎没有一个人能够看到我正在看的东西(或者对我来说没有任何意义)。
我正在开发一个项目,例如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?
答案 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就可以了。