我们的存储库 ( https://github.com/code-dot-org/code-dot-org ) 最近已转换为使用 Git LFS。我们在 Git 中有大型静态 Web 目录,这无疑不是一个很好的模式。我们的方法是将这些大型目录包含在 LFS 中,然后排除其中某些“已知为文本”的文件类型。
以下是此方法的示例.gitattributes:
.gitattributes
pegasus/sites.v3/** filter=lfs diff=lfs merge=lfs -text # include dir in LFS pegasus/sites.v3/**/*.haml !text -filter -merge -diff # exclude *.haml from LFS
但是,git diff排除项的表现并不符合预期,假设我修改了pegasus/sites.v3/hourofcode.com/views/front_join_us.haml. 这是由 dir 模式包含的,但随后被更具体的文件扩展名模式排除,但是当尝试获取 时git diff,它声称该文件是二进制文件并且不会比较它们:
git diff
pegasus/sites.v3/hourofcode.com/views/front_join_us.haml
diff --git a/pegasus/sites.v3/hourofcode.com/views/front_join_us.haml b/pegasus/sites.v3/hourofcode.com/views/front_join_us.haml index aaf209c98be..2de745be618 100644 Binary files a/pegasus/sites.v3/hourofcode.com/views/front_join_us.haml and b/pegasus/sites.v3/hourofcode.com/views/front_join_us.haml differ
此外,它不会自动合并文件。神秘的是一些工具,比如 VSCode,可以正确地比较这个文件。
我已经确认front_join_us.hamlLFS 没有跟踪:
front_join_us.haml
git lfs ls-files | grep front_join_us.haml # returns nothing
根据您提供的信息,看起来您的 .gitattributes 文件配置正确,但是 git diff 不会按预期工作。在这种情况下,您可以尝试以下几种方法来解决问题:
git merge
综上所述,这些是您可以尝试解决 git diff 和 git merge 不按预期工作的一些方法。根据您的情况和喜好,选择最适合您的方法。