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