我们的存储库 ( https://github.com/code-dot-org/code-dot-org ) 最近已转换为使用 Git LFS。我们在 Git 中有大型静态 Web 目录,这无疑不是一个很好的模式。我们的方法是将这些大型目录包含在 LFS 中,然后排除其中某些“已知为文本”的文件类型。
以下是此方法的示例.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
,它声称该文件是二进制文件并且不会比较它们:
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.haml
LFS 没有跟踪:
git lfs ls-files | grep front_join_us.haml # returns nothing
根据您提供的信息,看起来您的 .gitattributes
文件配置正确,但是 git diff
不会按预期工作。在这种情况下,您可以尝试以下几种方法来解决问题:
git diff
不会按预期工作,但您仍然可以手动解决冲突。这意味着您需要检查变更并手动将它们应用到正确的文件版本中。git diff
和 git merge
。.gitattributes
:有时候,重新配置 .gitattributes
可能会解决问题。您可以尝试调整排除模式或重新组织文件以更好地与 LFS 集成。综上所述,这些是您可以尝试解决 git diff
和 git merge
不按预期工作的一些方法。根据您的情况和喜好,选择最适合您的方法。