首页 > 解决方案 > 如何让 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 总是使缓存无效。

  1. 是否有可能以某种方式将两个副本克隆到完全相同的文件中?(注意:我不想删除 .git 目录,因为我希望能够在图像中使用 git 来检查 repo 的版本。)

  2. 是否可以让 Docker 在缓存时忽略 .git 文件夹(注意 .git 文件夹仍然必须添加到图像中,所以 .dockerignore 不是一个选项?)

标签: gitdockercaching

解决方案


不要使用git-clone(1)but git-archive(1)(至少在最后)。它还包含已归档的修订,您可以在包含修订的文件中添加标记,例如创建标志文件。

对于需要完整克隆的存储库,同时克隆(或将克隆后的元数据更改为基线)。

通常不应该特别需要完整克隆。如果,您还可以考虑在流程中使用 tar-pipe 来简化结果,以便缓存保持有效(仅在需要时无效)。


推荐阅读