我正在尝试编写一个脚本,该脚本将使用 git 获取已更改的文件并基于该文件运行命令。我使用 docker-compose 进行开发,这是我正在处理的 repo https://github.com/my-grocery-price-book/www
当从容器内部运行 git diff-files
时,它会列出所有文件。
当从容器外部运行 git diff-files
时,没有文件。
将容器内的 git 升级到最新版本的 2.16 仍然给出相同的输出。
重现步骤:
git clone https://github.com/my-grocery-price-book/www.git
docker-compose run --rm app bash
git diff-files
有人知道我需要做什么才能让 git 在 docker 中正常运行吗?
最佳答案
git diff-files使用哈希算法比较工作树和索引中的文件。工作树中的文件与本地环境中的文件具有相同的哈希值。
我的假设是,当您在 docker 容器中运行 git diff-files
时,由于 docker 卷挂载和输出,索引没有正确反射(reflect)。如果您要在 docker 容器本身中重新克隆整个存储库,则不会发生这种情况。但是,如果您在此之后立即将上下文切换回本地环境并执行 git diff-files
,则行为会相反(即,当您在容器外而不是在容器内时,它会列出所有文件容器)。
由于您可能要在 docker 容器和本地环境之间切换,因此您可以执行以下操作:
git diff > /dev/null && git diff-files
使用git diff
刷新索引,强制输出到/dev/null
,然后git diff-files
会反射(reflect)正确输出。您需要在两种环境中都这样做,尤其是从一种环境切换到另一种环境时。如果你觉得整个命令太长,你可能会发现 git aliases有帮助。
关于git - 修复 git diff-files 列出 docker 中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185186/