Интеграция Git в Xcode 4 очень приветствуется, однако она кажется немного ненадежной, когда дело доходит до работы с удаленными репозиториями. Для ясности я использую OS X версии 10.6.7 и Xcode 4.0.2 (4A2002a).
Если я создам новый проект Xcode 4 и приму возможность создать локальный репозиторий Git, все будет хорошо. Я могу зафиксировать локально, и это здорово.
Когда я хочу отправить новый проект на GitHub, я хочу добавить удаленный репозиторий и отправить свои локальные изменения на GitHub. Я могу добавить репозиторий GitHub в Xcode 4 в качестве нового репозитория в окне Организатора, но нет способа установить его в качестве удаленного репозитория для моего существующего проекта.
Поэтому я переключаюсь на использование команд git в Терминале.
git remote add origin https://<username>@github.com/<organization>/<repository>.git
Если я вернусь к Xcode 4 и попытаюсь использовать
Файл -> Система управления версиями -> Нажать...
затем появится диалоговое окно Выберите репозиторий, в который следует отправить изменения. со списком удаленного репозитория origin. Есть желтый индикатор, говорящий о том, что требуется аутентификация, и это нормально, поскольку я еще не смог ввести свои учетные данные для HTTPS. Однако, когда я нажимаю «Отправить», и он пытается отправить изменения, он говорит: «Операция не может быть выполнена, поскольку доступ к источнику репозитория запрещен».
Затем появляется диалоговое окно с запросом моего имени пользователя и пароля с моим предварительно заполненным, поэтому он должен правильно прочитать это из конфигурации локального репозитория.
Когда я ввожу свой пароль, Xcode 4 вылетает со следующей ошибкой
ASSERTION FAILURE in /SourceCache/IDEKit/IDEKit-303/Framework/Classes/SourceControl/IDESourceControlOperationInfo.m:59
Details: Message sent to invalidated object: <IDESourceControlPushOperationInfo, 0x200bd2a80>. Backtrace for invalidation:
(null)
Object: <IDESourceControlPushOperationInfo: 0x200bd2a80>
Method: -invalidate
Thread: <NSThread: 0x200020700>{name = (null), num = 1}
Hints: None
Если я перезапущу Xcode, репозиторий origin будет добавлен в обозреватель репозиториев в Organizer, и я увижу основную ветку на GitHub, поэтому я знаю, что учетные данные верны, и я ничего не меняю.
Кто-нибудь нашел надежный способ использования Xcode 4 с GitHub, начиная с локального проекта?
Если я клонирую существующий репозиторий GitHub с проектом Xcode в нем, открою его с помощью Xcode 4, тогда, даже если первый толчок, похоже, потерпит неудачу, второй толчок сработает. Так что, возможно, начинать с нуля с Xcode 4, создавая репозиторий для меня, не лучший шаблон (пока они не улучшат инструменты Git в более поздней версии Xcode 4).
ИЗМЕНИТЬ С ДОПОЛНИТЕЛЬНЫМИ ДЕТАЛЯМИ ОДНОГО ВРЕМЕННОГО РЕШЕНИЯ
Этот пример действительно применим только к первому проекту, который вы добавляете в репозиторий GitHub. Поэтому я думаю, что вам лучше выполнить следующие шаги, учитывая, что в этом решении все еще есть некоторые «подводные камни» Xcode.
- Пункт списка
- «Подключиться к репозиторию» из диалогового окна «Добро пожаловать в Xcode».
- Используйте URL-адрес GitHub SSH для местоположения
- Дайте ему имя (RepositoryName) и клонируйте в каталог
- 1-я попытка кажется неудачной, даже если содержимое загружено
- Попробуйте еще раз, и это работает.
- Теперь в окне Организатора определен новый репозиторий, в качестве источника которого указан удаленный URL-адрес SSH GitHub.
- Создайте новый проект в каталоге, в который вы только что клонировали, но НЕ отмечайте опцию «Создать локальный репозиторий git для этого проекта».
- Сделайте первоначальную фиксацию в локальном репозитории Git.
- Попробуйте систему управления версиями -> Push, и Xcode 4 завершится ошибкой: «Операция не может быть выполнена, поскольку доступ к репозиторию RepositoryName запрещен. Проверьте имя пользователя и пароль'
- Попробуйте Source Control -> Push, и Xcode 4 снова откроет диалоговое окно удаленного репозитория, но на этот раз обнаружил удаленный репозиторий с именем origin. Рядом с ним есть желтый шар и «Требуется аутентификация».
- Повторное нажатие кнопки «Push» привело к тому, что удаленное нажатие сработало.
Одна вещь, которую я заметил, но еще не удалось решить, заключается в том, что ответные сообщения, возвращаемые из GitHub с хеш-значением проверки, и любые сообщения, похоже, отображаются в навигаторе журнала Xcode как сбои Push, даже если Push успешно GitHub обеспокоен.
У кого-нибудь есть лучшее решение?