Раскалывание - скорее страшная боль от перспективы рабочего процесса git, когда несколько людей сотрудничают с ними. Например, XML в файле .storyboard имеет свои начальные атрибуты <document>
tag toolsVersion
и systemVersion
, измененные любой конфигурацией, с которой работает последний манипулятор. Синхронизация всех версий Xcode точно помогает с помощью toolsVersion
, но systemVersion
изменяется независимо от того, что в зависимости от конкретной версии Mac и/или OS X разработчика работает.
Это идиотский, но в основном безвредный. Однако нас беспокоит то, что в другое время некоторые другие изменения автоматически преобразуются в раскадровку, просто открывая их после git pull
. То есть Алиса вносит изменения в раскадровку, совершает и толкает их в репозиторий. Затем Боб вытаскивает изменения Алисы и открывает раскадровку, чтобы внести дальнейшие изменения. В тот момент, когда он открывает раскадровку, значок файла немедленно изменяется на измененное, но несохраненное состояние, а git status
показывает, что произошло любое количество странных изменений. Все это без того, чтобы Боб ничего не изменил или не сохранил сам файл.
Наиболее распространенным автоматическим изменением, которое мы видим, является исчезновение или повторное появление всего тэга <classes>
в иерархии в конце файла раскадровки. Мы не выяснили, что вызывает это. У нас может быть несколько локализованных версий раскадровки в разных каталогах .lproj, и при их открытии внутри Interface Builder иерархия классов может быть спонтанно удалена из некоторых и добавлена в другие или оставлена одна в некоторых. Это вызывает много шума в git diff
, но на самом деле он не нарушает никаких функций. Мы часто будем избирательно добавлять фактические изменения, внесенные нами в индекс git, фиксировать их, а затем просто отбрасывать спонтанные, бессмысленные изменения <classes>
. Это должно держать мелкие и приятные, как и должно быть. В конце концов, однако, это просто становится слишком много, чтобы беспокоиться, так как Xcode продолжает повторять изменения, а кто-то просто ragecommits их вместе с некоторыми другими вещами... это нормально, пока кто-то еще Xcode не захочет изменить их для no очевидная причина. (Наша история фиксации имеет много ругательств над этим.)
Кто-нибудь еще видит это поведение? Является ли это ошибкой Xcode или проблемой конфигурации на одном или нескольких наших Mac-разработчиков? Мы видели подобное поведение при взаимодействии с XIB файлами, но раскадровки выглядят более восприимчивыми к этому.