我正在尝试以一种“艺术家友好”的方式为Unity设置Git和GitHub桌面。
我看到了不同的建议和各种.gitattributes
文件,但没有一个令人满意。原因之一是大多数要求设置自定义合并驱动程序并使用Unity的YAML合并工具。但是,这在我们的环境中都不是很理想,而且我也不总是对从Unity的合并工具获得的结果感到满意。
Unity的资产序列化设置为强制文本,并且我们有可见的元文件。
理想情况下,我希望通过选择我们的或他们的解决所有合并冲突。可能是源代码周围的例外,在该源代码中合并有意义且易于阅读。
我的尝试之一包括设置.gitattributes
来处理Unity场景文件,如下所示:
*.unity merge=binary -diff -text
这在GitHub Desktop中提供了所需的行为,但不幸的是,由于所有更改都被视为二进制,因此Git历史也迅速增长。
另一种尝试是:
*.unity merge=binary diff -text
这使得增量更改可以很好地工作,并防止Git历史记录迅速增长,但是现在每个合并冲突都可以通过用户进行合并的更改自动解决。也不理想。
我们还将Git LFS用于其他二进制文件,因此解决方案也可以是将所有Unity资产文件也存储在LFS中。但这也会带来冲突问题。
在我的.gitattributes
中,
*.png filter=lfs diff=lfs merge=lfs -text
发生冲突时,GitHub Desktop尝试合并二进制文件,导致文件损坏(这种行为超出了我的范围)。这里的分辨率是多少?
我仍在学习有关Git的更多信息,并且仍然感到陌生,但是Web上大量的“好的建议”确实使事情变得更加混乱。我当然也在Git文档中寻找答案,但是找不到这个特定问题的答案。我真的只是想了解.gitattributes
的工作原理以及使用它的可能性。
也欢迎其他客户提出建议,但是对艺术家友好是关键。
我知道我可以使用git checkout --theirs -- path/to/file
,但这并不是我所说的 artist friendly 。
也许这更多是对GitHub Desktop的反馈请求,但我认为也许会有一种方法可以配置Git以使用所需的行为。最好仅使用.gitattributes
。
经调查,Git LFS合并似乎只是用指针替换了image.png
的内容。是吗?
version https://git-lfs.github.com/spec/v1
<<<<<<< HEAD
oid sha256:eebb5d4ccca98dec56306a22cfd518de0d066674f5c4a4859daef7fe0dc54d4d
size 12748
=======
oid sha256:13c917ff0743750c72d0229f6311db52b2663790a2ef3774d1b661e516bf6852
size 15275
>>>>>>> 669836a1b32690baf4ef84dac711c44d274966c4
该问题似乎与GitHub桌面有关:https://github.com/desktop/desktop/issues/7166
建议的解决方案是像这样添加binary
:
*.png filter=lfs diff=lfs merge=lfs -text binary