Контроль исходного кода в XCode - это кошмар - кто-нибудь может дать совет? - PullRequest
9 голосов
/ 08 марта 2012

Использование Git с Xcode (4.3) - настоящий кошмар.

Вот сценарий ...

Я хочу добавить новую функцию, поэтому я создаю новую ветку темы.

Я добавляю свою новую функцию, и я готов к фиксации, перебазированию и слиянию ...

Я фиксирую свои изменения - отлично.

Я возвращаюсь к мастеру, чтобы вытащитьизменения (в случае, если кто-то еще обновил код).Внезапно я получаю:

error: Your local changes to the following files would be overwritten by checkout:
myProject/project.xcworkspace/xcuserdata/Bodacious.xcuserdatad/UserInterfaceState.xcuserstate

а?Я только что совершил.

XCode любит изменять мои project.xcworkspace файлы каждую секунду, что делает почти невозможным чистые атомарные коммиты.

Более того, если я фиксирую изменения вproject.xcworkspace и быстро перейти к другой ветке (например, для слияния с Мастером), тогда XCode пожалуется, что файлы изменились и, вероятно, тоже вылетает.

Из того, что я собрал, Я могуНе добавляйте эти файлы в мои .gitignore.

Должен ли я признать, что краткая и упорядоченная стратегия git невозможна с Xcode, закройте Xcode перед выполнением какого-либо управления Git или естьдругой вариант доступен?

Ответы [ 4 ]

12 голосов
/ 08 марта 2012

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

Итак, у меня есть:

*.xcworkspace

В .gitignore

Обратите внимание, что вопрос о стековом потоке, на который вы ссылались, говорит, что он не должен исключать project.pbxproj, но он не говорит, что не следует исключать *.xcworkspace.

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

2 голосов
/ 08 марта 2012

Вопрос, на который вы ссылались, касался только файла xcodeproject/project.pbxproj.Вы должны быть в состоянии безопасно .gitignore другие файлы.

0 голосов
/ 03 июня 2014

Вот что сработало для меня в Xcode 5.1:

  1. Подтвердите изменения и внесите изменения в ветку, в которой вы находитесь.
  2. Перейдите в Xcode> Source Control> Отменить все изменения (следует исключить только проблему рабочей области)
  3. Извлеките ветку, которую вы хотите, и объедините или все, что вы пытаетесь сделать.

Примечание: если вы слишком долго ждете или делаете что-то в Xcode, прежде чем проверять новую ветку, вам, возможно, придется отменить изменения снова

0 голосов
/ 14 мая 2012

Если вы не можете отправить свой коммит только потому, что UserInterfaceState.xcuserstate был изменен, вот быстрое исправление:

  1. Откройте органайзер, перейдите в хранилище, скопируйте код коммита (что-то вроде f01a2147218d by username)
  2. Откройте терминал, перейдите в папку вашего проекта, выполните git reset --hard f01a2147218d
  3. Нажмите коммит!
...