#git #github #xcode4 #push
#git #github #xcode4 #толкать
Вопрос:
Интеграция 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 и попытаюсь использовать
Файл -> Управление версиями -> Push…
затем выберите репозиторий, в который будут внесены изменения.появится диалоговое окно со списком исходного удаленного репозитория. Желтый индикатор говорит о том, что требуется аутентификация, что нормально, поскольку я еще не смог ввести свои учетные данные для HTTPS. Однако, когда я нажимаю «Push» и он пытается внести изменения, он сообщает «Операция не может быть выполнена, поскольку доступ к репозиторию «origin» запрещен».
Затем появляется диалоговое окно с запросом моего имени пользователя и пароля с предварительно заполненными моими данными, поэтому оно должно правильно считывать это из конфигурации локального репозитория.
Когда я ввожу свой пароль, 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 для отличного происхождения репозиторий был добавлен в репозитории браузера в организаторе и я вижу ветку master на GitHub, так что я знаю, что учетные данные правильно и без меня меняется ничего.
Кто-нибудь нашел надежный способ использования Xcode 4 с GitHub, начиная сначала с локального проекта?
Если я клонирую существующий репозиторий GitHub с проектом Xcode в нем, откройте его с помощью Xcode 4, тогда, несмотря на то, что первое нажатие, похоже, завершилось неудачей, второе нажатие сработало. Так что, возможно, начинать с нуля с Xcode 4, создавая репозиторий для меня, не лучший вариант (пока они не улучшат инструментарий Git в более поздней версии Xcode 4).
РЕДАКТИРОВАТЬ С ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИЕЙ Об ОДНОМ ОБХОДНОМ ПУТИ
Этот пример действительно применим только к первому проекту, который вы добавляете в репозиторий GitHub. Поэтому я думаю, что вам лучше выполнить следующие шаги, учитывая, что в этом решении, похоже, все еще есть некоторые «подводные камни» Xcode.
- Элемент списка
- «Подключиться к репозиторию» из диалогового окна Добро пожаловать в Xcode.
- Используйте SSH-URL GitHub для определения местоположения
- Дайте ему имя (RepositoryName) и клонируйте в каталог
- первая попытка, похоже, завершается неудачей, хотя содержимое загружено
- Попробуйте еще раз, и это сработает.
- Теперь в окне Organizer определен новый репозиторий, источником которого является удаленный SSH-URL GitHub.
- Создайте новый проект в каталоге, в который вы только что клонировали, но НЕ отмечайте опцию «Создать локальный репозиторий git для этого проекта».
- Выполните первоначальную фиксацию в локальном репозитории Git.
- Попробуйте управление версиями -> Push, и Xcode 4 завершается с ошибкой ‘Операция не может быть выполнена, поскольку доступ к репозиторию RepositoryName был запрещен. Проверьте имя пользователя и пароль’
- Попробуйте управление версиями -> Push, и Xcode 4 снова откроет диалоговое окно удаленного репозитория, но на этот раз обнаружил удаленный репозиторий с именем origin. Рядом с ним есть желтый шар и «Требуется аутентификация».
- Повторное нажатие ‘Push’ привело к тому, что удаленный Push заработал.
Одна вещь, которую я заметил, но еще не успел проработать, заключается в том, что ответные сообщения от GitHub с контрольным значением хэша и любые сообщения, похоже, отображаются в Xcode Log navigator как сбои отправки, даже если отправка прошла успешно, насколько это касается GitHub.
У кого-нибудь еще есть решение получше?
Ответ №1:
Я думаю, что нашел способ Xcode перенести существующий проект в GitHub или любой другой удаленный репозиторий!
Предварительные условия
- Я предполагаю, что у вас есть проект, созданный Xcode 4 с использованием локального репозитория git.
- Вы создали пустой удаленный репозиторий git (в следующем примере я называю его RemoteRepository)
Отправьте его на удаленный
-
Откройте Органайзер в Xcode и перейдите на вкладку Репозитории
-
Сначала нажмите на пульты, а затем на «Добавить удаленный»
-
Введите удаленное имя и местоположение вашего удаленного репозитория и нажмите создать
-
Затем выберите свой проект и откройте
File -> Source Control -> Push ...
-
Выберите свой удаленный репозиторий и подождите, пока к нему можно будет подключиться! Найдите Создать в скобках.
-
Теперь ваш старый проект опубликован на GitHub
Я надеюсь, что это сработает и у вас! В моем случае это работает с каждым удаленным репозиторием git.
Пожалуйста, свяжитесь со мной в Twitter, если что-то неясно или написано на плохом английском!
Комментарии:
1. Спасибо, это единственное решение, которое сработало для меня, поскольку у меня был существующий проект.
2. @Tim Krueger: Привет, Тим, спасибо за разъяснения :), мне интересно, могу ли я опубликовать свой проект на GitHub, чтобы его видели
only
члены команды, пока мы его разрабатываем, чтобы сделать GitHub общим местом для моей команды. Заранее спасибо3. @Luca Ваш комментарий — это вопрос? Уверен, что это возможно. Но вы должны платить за частные репозитории на GitHub!
4. Почему бы вместо этого не использовать BitBucket?. Он поддерживает Git.
5. @TeofiloIsraelVizcainoRodrig Проблема заключалась не в поставщике репозитория! Мое описание должно работать также с BitBucket.
Ответ №2:
Я успешно сделал это, используя ssh-соединение (которое выглядит как git@github.com:<username>/<project>.git
). Он аутентифицирует пользователя на основе открытого ключа SSH, который вы можете сгенерировать в командной строке — множество документов об этом на github в разделе «справка».
Комментарии:
1. Хорошо, тогда я попробую использовать другой метод доступа SSH. Как и HTTPS, я могу добавить репозиторий ssh в окно Organizer, но, похоже, в момент взаимодействия с удаленным репозиторием он не проходит надлежащую аутентификацию. Спасибо, что сообщили мне, что у вас все работает нормально. Дает мне некоторую надежду!
2. Я написал в блоге о своем опыте подключения GitHub к работе с XCode 4 над новыми проектами с использованием метода SSH. Был бы признателен за ваши мысли о том, что я нашел, Дэн. mindthe.net/devices/2011/04/28 /…
3. Я успешно запустил терминал. Но когда я попытался из органайзера, я получил страшную «команда не найдена» при проверке пульта дистанционного управления, а при попытке нажать, пульт отображается как «отключенный». Он расположен на сервере Mac Os X в моей локальной сети…
Ответ №3:
Xcode 6.2 (и, возможно, 6.x) изменил ситуацию. В органайзере больше нет вкладки Репозитории. Вот как это сделать с более новыми Xcodes.
Чтобы добавить проект с локальным репозиторием git в GitHub, вот что вы делаете:
- Перейдите в меню управления версиями, выберите свой проект и выберите Настроить:
- Вы увидите:
- Выберите вкладку Remotes и нажмите » » в левом нижнем углу. Выберите Добавить удаленный.
- Введите имя удаленного репозитория и URL-адрес вашего удаленного репозитория. Убедитесь, что вы уже создали этот удаленный репозиторий, и если на GitHub, make вы указываете, что это существующий проект, а не новый.
- Вы почти закончили. Перейдите в меню управления версиями и выберите Push. Затем вы увидите название репозитория, который вы использовали на последнем шаге, что-то вроде «simplest / master»; нажмите кнопку.
Выполнено.