Всегда разрешайте конфликты в Git с нашими или их - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь настроить Git и GitHub Desktop "удобным для художника" способом для Unity.

Я видел разные предложения и различные .gitattributes файлы, но ни один из них не имел был удовлетворительным. Одна из причин заключается в том, что для большинства из них требуется настроить собственный драйвер слияния и использовать инструмент слияния YAML от Unity. Тем не менее, это не идеально в нашей среде, и я не всегда рад результатам, которые я получаю от инструмента слияния Unity.

Сериализация активов Unity установлена ​​на Force Text , и у нас есть видимые метафайлы .

В идеале, я бы хотел, чтобы все конфликты слияния были разрешены выбрав наши или их . Исключением может быть исходный код, в котором слияние имеет смысл и легко читается.

Первая попытка

Одна из моих попыток включала настройку .gitattributes для обработки файлов сцен Unity, например:

*.unity merge=binary -diff -text

Это дает желаемое поведение в GitHub Desktop, но, к сожалению, также заставляет историю Git быстро расти, потому что все изменения обрабатываются как двоичные.

GitHub Desktop resolve

Вторая попытка

Была предпринята еще одна попытка:

*.unity merge=binary diff -text

Эти сделанные изменения дельты работают хорошо и предотвращают Git история быстро растет, но теперь каждый конфликт слияния автоматически разрешается с изменениями от пользователя, выполняющего слияние. Также не идеально.

GitHub Desktop resolve

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

...