【发布时间】:2021-07-11 04:20:10
【问题描述】:
当我克隆一个存储库两次时,例如:
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 映像添加一些存储库。当文件没有改变时,Docker 使用它的缓存。不幸的是,在克隆后,由于文件更改,Docker 总是使缓存无效。
是否有可能让一个 repo 的两个克隆生成完全相同的文件? (注意:我不想删除 .git 目录,因为我希望能够在图像中使用 git 来检查 repo 的版本。)
-
是否可以让 Docker 在缓存时忽略 .git 文件夹(注意 .git 文件夹仍然必须添加到映像中,所以 .dockerignore 不是一个选项?)
【问题讨论】:
-
如何使用 docker COPY 命令将预克隆的 git 文件夹从主机文件系统移动到映像?
-
这不起作用: 1. 我在文件夹 X 中克隆 repo 2. 使用 COPY 将文件夹 X 添加到映像 3. 构建映像 4. 删除 X 5. 重新克隆 X现在,当您重建 docker 映像时,docker 不会将缓存用于 COPY X 步骤。
-
对不起,我猜我错了,我认为 repo 内容在 2 个图像之间保持不变,您不需要删除 X 并再次重新克隆。
-
同一台机器上的不同用户也将修改 Docker Image,因此他也将克隆一个 repo。如果 repo 没有改变,Docker 会使用它的缓存。但是,即使克隆的 repo 在同一次提交时,也会根据 Docker 更改一些文件。