Я пытаюсь настроить Git и GitHub Desktop "удобным для художника" способом для Unity.
Я видел разные предложения и различные .gitattributes
файлы, но ни один из них не имел был удовлетворительным. Одна из причин заключается в том, что для большинства из них требуется настроить собственный драйвер слияния и использовать инструмент слияния YAML от Unity. Тем не менее, это не идеально в нашей среде, и я не всегда рад результатам, которые я получаю от инструмента слияния Unity.
Сериализация активов Unity установлена на Force Text , и у нас есть видимые метафайлы .
В идеале, я бы хотел, чтобы все конфликты слияния были разрешены выбрав наши или их . Исключением может быть исходный код, в котором слияние имеет смысл и легко читается.
Первая попытка
Одна из моих попыток включала настройку .gitattributes
для обработки файлов сцен Unity, например:
*.unity merge=binary -diff -text
Это дает желаемое поведение в GitHub Desktop, но, к сожалению, также заставляет историю Git быстро расти, потому что все изменения обрабатываются как двоичные.
Вторая попытка
Была предпринята еще одна попытка:
*.unity merge=binary diff -text
Эти сделанные изменения дельты работают хорошо и предотвращают Git история быстро растет, но теперь каждый конфликт слияния автоматически разрешается с изменениями от пользователя, выполняющего слияние. Также не идеально.
Git LFS
Мы также используем Git LFS для других двоичных файлов, поэтому Решением также может быть просто хранить все файлы ресурсов Unity в LFS. Но это также создает проблемы с конфликтами.
В моем .gitattributes
у меня есть
*.png filter=lfs diff=lfs merge=lfs -text
Когда возникает конфликт, GitHub Desktop пытается объединить двоичные файлы, в результате чего битый файл (это поведение выходит за рамки меня). Какое здесь будет разрешение?
Примечание 1
Я все еще узнаю больше о Git и все еще чувствую себя новичком в этом, но количество "хороших советов" в Интернете делает вещи более запутанные. Я, конечно, также искал ответ в документации Git, но не смог найти ответ на этот конкретный вопрос. На самом деле я просто пытаюсь понять, как работает .gitattributes
и что с ним возможно.
Также приветствуются предложения для других клиентов, но ключевым фактором является дружественный к художнику .
Примечание 2
Я знаю, что я мог бы использовать git checkout --theirs -- path/to/file
, но это не совсем то, что я бы назвал для художника .
Примечание 3
Возможно, это скорее запрос обратной связи для 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 Desktop: https://github.com/desktop/desktop/issues/7166
Предлагаемое решение - добавить binary
следующим образом:
*.png filter=lfs diff=lfs merge=lfs -text binary