我正在尝试编写一个脚本,该脚本将使用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中正常运行?
答案 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有帮助。