如何处理在Docker容器中使用`git ls-files`的gemspecs?
这是问题:
我有几个gem回购叉分支进行更改,并作为子模块添加到vendor
。 通常我会在Gemfile
指定这些依赖关系, Gemfile
所示:
gem 'whatever', path: './vendor/whatever'
这在我的本地机器上工作正常,但.git
目录不复制到Docker容器,因为这会增加荒谬的膨胀,包括应用程序和每个供应商的部署的完整修订历史logging 。 看来容器应该只包含他们运行的应用程序版本的代码。 他们已经够胖了。
但是,当我尝试在Docker容器bundle install
构build应用程序时, bundle install
失败,因为.git
目录不存在,导致git ls-files
呕吐:
fatal: Not a git repository (or any of the parent directories): .git
我怎样才能解决这个问题, 而无需将.git
目录添加到容器 。
当我在Gemfile
使用源代码的path
,我甚至需要文件列表是否正确?
现在我只是检查如果./.git
存在,并设置spec.files = []
如果不存在。 这似乎工作到目前为止,但不知道如果/当它会咬我。
我考虑过的其他方法:
-
Glob for
.gitignore
文件,parsing模式并针对目录中的文件进行过滤。- 我已经找遍了图书馆来做这件事,但是还没有find任何东西,而且很难花时间编写和debugging我现在的日程安排。
- 另外,我认为在Git跟踪的文件匹配忽略模式(强制添加或在忽略模式之前添加)的情况下,这会产生不正确的结果。
-
在docker
docker build
之前在主机上生成一个文件清单,如果缺less./.git,gemspec会查找该文件。- 虽然增加了复杂性,但似乎远低于(1)和模式。
其他人怎么解决这个问题呢? 任何额外的想法?
提前致谢。