为什么git diff-tree命令输出的文件路径不是完整绝对路径?
问题原因
这个现象是Git的设计特性和你使用的命令逻辑共同导致的:
- Git本身仅跟踪相对于仓库根目录的相对路径,不会存储、感知文件在操作系统层面的完整绝对路径。你执行的
git diff-tree --name-only命令默认输出的就是相对路径,你在仓库根目录执行时输出的就是相对于根目录的folder/file.txt格式的路径。 md5sum的输出规则是:你传入的路径是什么格式,输出时就会保留什么格式。你把Git输出的相对路径直接传给md5sum,最终结果自然只会显示相对路径。
解决方案
如果你需要输出完整绝对路径,可以通过git rev-parse --show-toplevel动态获取当前仓库的根目录绝对路径,拼接后再传给md5sum,修改后的命令如下:
git diff-tree --no-commit-id --name-only -r 08dca334d9b6aa416b377566a8d8606f71b5b8da | xargs -I {} sh -c 'md5sum "$(git rev-parse --show-toplevel)/{}"'
内容的提问来源于stack exchange,提问作者Helium
相关产品推荐
相关产品推荐

