Git, как установить.gitattributes для раскадровки И.xib файлы

фон: git -- или любой другой SCM -- может "успешно" объединить раскадровки, xib и файлы pbxproj, поскольку по своей сути они являются просто xml. Иногда возникают конфликты, которые могут быть решены с помощью обычных стратегий разрешения конфликтов. Но xib и раскадровки-это сериализованные форматы некоторых довольно сложных структур данных, поэтому начинается самое интересное.

как и в случае с другим исходным кодом, успешное слияние не гарантирует корректной работы всех объединенных изменений вместе. С файлами, о которых идет речь, git может успешно объединить, но Xcode иногда отображает ошибку "не удалось прочитать архив" при попытке открыть его - т. е. слияние повредило xib.

Я видел предложения о том, чтобы git игнорировал .xibs (не практично), или в .gitattributes отключить diff, установив

*.xib -crlf -diff

технически, это исправляет конфликт слияния / поврежденную проблему xib - но теперь чьи-то изменения потеряны?

точно, лучше рекомендация, которую я видел для файла проекта, - merge=union in .gitattributes по:

*.pbxproj merge=union

вопрос: Я искал совсем немного, и, похоже, нет хорошего решения. Могут ли люди с опытом, скажите мне, что происходит в нескольких случаях использовать?

  1. в проекте я переименовываю файл из x в y и удаляю fileA. Тем временем другой программист внес изменения, чтобы добавить файл и удалить файл. Каков результат слияния? Я уверен фактические изменения файловой системы будут правильными, но в панели навигатора Xcode:

    • увижу ли я и x, и Y?
    • будет fileaбыл снова, потому что это все-таки в другом программиста .pbxproj по?
    • будет подан все еще там, потому что он все еще в моем .pbxproj по?
  2. Если git игнорирует .xib files-получу ли я хотя бы предупреждение о том, что файл был изменен и не обрабатывается?

1 ответов


Я бы не устанавливал никаких конкретных .gitattributes для файлов проекта или nibs в эти дни.

ваши проблемы слияния параллельных изменений в проекты Xcode и xibs/раскадровки существуют в каждой команде с более чем одним разработчиком.

проекты Xcode

несколько трюков для борьбы с конфликтами проекта Xcode:

  • Возьмите одну сторону слияния и вручную примените другие изменения после слияния. Если вы удалили файлы, они будут красными, если вы нужно добавить их, они будут доступны для добавления.
  • при добавлении файлов к вашим целям они будут идти в нижней части фазы сборки "компиляция источников". Избегайте конфликтов с другими людьми, перетаскивая их вверх по этому списку в случайную позицию.
  • использовать .xcconfig файлы настроить ваши проекты вместо раздела настроек сборки. Файлы конфигурации тривиальны для слияния.

мой лучший совет, если вы сомневаетесь, чтобы принять одну сторону слияния, расслабьтесь и повторите свои дополнения.

XIBs и раскадровки

формат XIBs (и, следовательно, раскадровки) значительно изменился в последние месяцы. Я обнаружил, что дополнительные объекты добавляются во внутренние коллекции файла и слияния могут быть легко выполнены. Если вы вносите изменения в один и тот же объект, вы можете получить там вручную.

этот пост из Itty Bitty Apps выделяет основные изменения:

преимущества этого нового формата XIB XML во много раз:

  • XIBs намного меньше (меньше строк кода).
  • разработчик может легко прочитать XML и понять, что он указывает в пользовательском интерфейсе.
  • слияние XIBs теперь гораздо менее вероятно приведет к сломанным XIBs. Раньше мы редко даже пытались объединить XIB или раскадровку.