git - 如何让 git clone 与 Docker 缓存配合得很好?
问题描述
当我克隆存储库两次时,例如:
git clone <repo_X> --depth 1 clone1
git clone <repo_X> --depth 1 clone2
然后做一个差异
diff -r clone1 clone2
这显示了差异:
Binary files clone1/.git/index and clone2/.git/index differ
...
diff -r clone1/.git/logs/HEAD clone2/.git/logs/HEAD
...
diff -r clone1/.git/logs/refs/remotes/origin/HEAD
...
似乎其中克隆的时间记录在文件中。
我想向 Docker Image 添加一些存储库。当文件没有改变时,Docker 使用它的缓存。不幸的是,在克隆后,由于文件更改,Docker 总是使缓存无效。
是否有可能以某种方式将两个副本克隆到完全相同的文件中?(注意:我不想删除 .git 目录,因为我希望能够在图像中使用 git 来检查 repo 的版本。)
是否可以让 Docker 在缓存时忽略 .git 文件夹(注意 .git 文件夹仍然必须添加到图像中,所以 .dockerignore 不是一个选项?)
解决方案
不要使用git-clone(1)
but git-archive(1)
(至少在最后)。它还包含已归档的修订,您可以在包含修订的文件中添加标记,例如创建标志文件。
对于需要完整克隆的存储库,同时克隆(或将克隆后的元数据更改为基线)。
通常不应该特别需要完整克隆。如果,您还可以考虑在流程中使用 tar-pipe 来简化结果,以便缓存保持有效(仅在需要时无效)。
推荐阅读
- reactjs - 使用 usestate 反应钩子保存对象打印未定义
- reactjs - scroll -react native 上的粘滞标签
- arrays - 通过将文件中的二进制值转换为 3-3-2 颜色,将 8 位颜色显示到屏幕上
- angular - Phaser 3:容器和组之间的区别?
- c# - 使用稍微不同的方法签名标准化子类
- laravel-backpack - 具有透视数据的可重复字段
- python - 如何在查询回调中从 python twisted.names defer 返回 DNS 查找?
- android - 在 wifi 连接中为 http/https 请求 Android 设置中间人代理时没有互联网
- amazon-aurora - Postgres“REASSIGN OWNED”失败,“模式公共的权限被拒绝”
- python - 如何解决查找轮廓时产生的python openCV错误“没有足够的值来解包(预期3,得到2)”?