Почему git постоянно добавляет и удаляет раздел Storyboard ‹classes›?

При сохранении раскадровки и фиксации изменений в git велика вероятность, что весь раздел <classes> будет удален или добавлен в систему управления версиями (git). Я использую git в командной строке, а не интегрированный пользовательский интерфейс XCode.

Сначала это выглядит так:

+    <classes>
+        <class className="CPTGraphHostingView" superclassName="UIView">
+            <source key="sourceIdentifier" type="project" relativePath="./Classes/CPTGraphHostingView.h"/>
+        </class>
...
+    </classes>

И в следующем коммите это выглядит так:

-    <classes>
-        <class className="CPTGraphHostingView" superclassName="UIView">
-            <source key="sourceIdentifier" type="project" relativePath="./Classes/CPTGraphHostingView.h"/>
-        </class>
...
-    </classes>

Почему так и, что более важно: как я могу это остановить?


person ericteubert    schedule 25.04.2012    source источник
comment
Действительно ли он добавляется и удаляется или перемещается в каждом коммите (т.е. в каждом коммите отображается как добавленный, так и удаленный)? Потому что последнее кажется гораздо более вероятным.   -  person Jan Hudec    schedule 25.04.2012
comment
Делаются ли коммиты на одном компьютере? А если нет, то они сделаны одной и той же версией Storyboard?   -  person Jan Hudec    schedule 25.04.2012
comment
@JanHudec Добавлено в одном коммите и удалено в другом. Я мог бы понять перемещение блока кода, но это происходит в отдельных коммитах. Мы 3 разработчиков и рассмотрим два аспекта, которые вы упомянули.   -  person ericteubert    schedule 25.04.2012
comment
@JanHudec Время от времени раскадровка <document ... systemVersion="..."> переключается между 11D50 и 11D50b. Не знаю, с чем это связано и может ли быть причиной.   -  person ericteubert    schedule 25.04.2012
comment
есть еще слова по этому поводу? я пытаюсь зафиксировать, и раздел ‹classes› удаляется из файла iPad.storyboard, но не из файла iPhone.storyboard. приложение отлично работает, если на iPad отсутствует раздел «классы», а на iPhone он есть. Между прочим, мои коммиты выполняются через SourceTree, а не через внутренний Xcode или командную строку.   -  person john.k.doe    schedule 07.06.2012
comment
@john.k.doe мы поняли, что это совсем не имеет значения. Поэтому, когда мы фиксируем или объединяем, мы пытаемся сохранить состояние предыдущего коммита, чтобы уменьшить шум.   -  person ericteubert    schedule 07.06.2012
comment
Ранее его также спрашивали в stackoverflow.com/questions/8135162/   -  person Chris W. Rea    schedule 06.05.2013


Ответы (2)


(этот ответ основан на личном опыте и не является формальным)

В разделе classes xml-файла .storyboard перечислены все контроллеры представлений, которые есть в вашем проекте, чтобы

  1. Разрешить помощнику редактора отображать правильный исходный файл при выборе элемента пользовательского интерфейса в построителе интерфейсов и
  2. Разрешите инспектору удостоверений (правая панель) отображать параметры пользовательского класса.

Я предполагаю, что этот раздел является кешем, который удаляется, когда оба из двух перечисленных выше способов не используются какое-то время.

Тот факт, что этот раздел появился в первую очередь, означает, что его можно безопасно игнорировать, поскольку он автоматически генерируется по мере необходимости. Если вы уже зафиксировали его и впоследствии он отображается как удаленный при сравнении, откройте Identity Inspector, раскройте список классов, доступных в разделе Custom Class, и снова посмотрите, как существует весь раздел.

person user1071136    schedule 07.11.2012
comment
Это очень хорошее объяснение. Но все же, есть ли способ избежать этого? Есть ли способ сказать Xcode, чтобы он всегда сохранял этот раздел в раскадровке вместо того, чтобы удалять его, когда Xcode захочет, и снова добавлять его, когда вы открываете раскадровку? Это беспорядок с коммитами и это надоедливо. - person Ricardo Sanchez-Saez; 06.06.2013

По моему опыту, удаление происходит только в том случае, если вы открываете раскадровку и имеете ошибки, связанные с существованием класса. Примером этого является открытие раскадровки, когда конфликт слияния еще не разрешен. Один или несколько классов могут быть недоступны для синтаксического анализа. В этом случае построитель интерфейса, похоже, удаляет весь раздел, а не только класс-нарушитель.

Для меня это легко исправить, снова открыв раскадровку после того, как патч будет готов, на случай, если я увижу удаление. Если все проблемы устранены, раздел создается заново. Если это не так, это означает, что у меня проблема с настройками проекта, и я все равно не должен делать коммиты.

person Mihai Timar    schedule 25.07.2013