修复列出docker中所有文件的git diff-files

时间:2018-03-09 01:21:06

标签: git docker docker-compose

我正在尝试编写一个脚本,该脚本将使用git来获取已更改的文件并基于此运行命令。我使用docker-compose进行开发,这是我正在处理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中正常运行?

1 个答案:

答案 0 :(得分:3)

git diff-files使用散列算法来比较工作树和索引中的文件。工作树中的文件与本地环境中的文件具有相同的哈希值。

我的假设是,当你在docker容器中运行git diff-files时,由于docker volume mount和输出,索引没有正确反映。如果您要在docker容器本身中重新克隆整个存储库,则不会发生这种情况。但是,如果您在此之后立即将上下文切换回本地环境并执行git diff-files,则行为相反(即,当您在容器外部但不在容器内时,它会列出所有文件。)

由于您可能在docker容器和本地环境之间切换,因此您可以执行以下操作:

git diff > /dev/null && git diff-files

使用git diff刷新索引并强制输出到/dev/null,然后git diff-files将反映正确的输出。您需要在两种环境中执行此操作,尤其是在从一个环境切换到另一个环境时。如果您觉得整个命令太长,您可能会发现git aliases有帮助。