Вилки CocoaPods и GitHub

108

Это мой первый разветвление проекта GitHub, и я тоже не слишком разбираюсь в CocoaPods, так что терпите меня.

По сути, я разветвлял проект на GitHub, используя в моем Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

Затем я внес некоторые изменения в вилку и, конечно же, когда я pod installустановил другой модуль, он переустановил оригинал REActivityViewControllerи удалил мои изменения.

Я понимаю, что мне нужно протолкнуть свои изменения в свою вилку раньше pod install, чем в другую , но как я узнаю, что это устанавливаемая вилка, учитывая, что это репо, установленное CocoaPods? Я посмотрел в REActivityViewControllerпапку, установленную под Podsпапкой, и там нет файлов git.

Нужно ли мне работать над форком вне моего проекта, а затем использовать CocoaPods для установки изменений? Это слишком громоздкий рабочий процесс.

Или мне нужно что-то делать с подмодулями?

Рамзель
источник

Ответы:

186

Я отвечу на этот вопрос на примере. У меня есть вилка TTTAttributedLabel с некоторыми дополнительными функциями, которые я добавил здесь:

https://github.com/getaaron/TTTAttributedLabel

Чтобы использовать это в проекте Cocoapods, я:

  1. Перенести мои изменения в мою вилку
  2. Настроить мой подфайл, чтобы получать изменения и обновления

После того, как вы разместили свои изменения в вилке, получите SHA последнего коммита. Вы можете сделать это с помощью git rev-parse origin/master | pbcopyили на странице коммитов GitHub для вашего проекта: Скриншот копирования SHA коммита на GitHub

Затем вы можете указать конкретную фиксацию на вашей вилке в своем Podfile следующим образом:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

После этого pod updateбудет обновлен этот конкретный коммит из вашей вилки. Если хотите, вы также можете создать podspecвилку для своей вилки, но я считаю этот подход более простым и не вносю изменения достаточно часто, чтобы оправдать новый рабочий процесс.

Нужно ли мне работать над форком вне моего проекта, а затем использовать Cocoapods для установки изменений? Это громоздкий рабочий процесс.

Вы можете сделать это так, но я обычно:

  1. Отредактируйте код внутри моего проекта и убедитесь, что он работает
  2. Скопируйте изменения на мою вилку,
    • экспорт патча, или
    • копирование всего файла исходного кода
  3. Зафиксировать и отправить на GitHub
  4. Обновите подфайл новым SHA
  5. Беги pod update.

Или мне нужно что-то делать с подмодулями?

Нет, не надо.

Аарон Брагер
источник
Последующий вопрос: Значит, действительно необходимо обновить Podfile новым SHA? pod installне будет просто автоматически клонировать самую последнюю версию с последней фиксацией?
Ramsel
Если вы переименуете свой проект во что-то другое и создадите свой собственный файл podspec, вы можете указать его в своем собственном репо и использовать pod 'MyForkName', :headвместо него.
Аарон Брагер
1
:head:указывает на самую новую фиксацию, но вы не можете использовать :gitи :headв той же строке.
Аарон Брагер
4
Это идеальное решение для использования кастомной вилки публичного проекта. В моем случае я форкнул и модифицировал проект, и у меня был открытый PR для сопровождающего, чтобы он объединил эти изменения, но я хотел обновить Podfile своего проекта, чтобы сразу использовать эти изменения. Это отлично сработало!
cbowns
2
@AaronBrager показывает: «Невозможно найти спецификацию для '<pod name>'». Вы знаете, как решить эту проблему?
Susim Samanta
34

Другой вариант - сделать так, чтобы ваш проект ссылался на модуль напрямую, а не через github. Таким образом, вам не нужно постоянно фиксировать вилку или копировать / вставлять код только для проверки ваших изменений. Вы можете работать с двумя разными проектами Xcode одновременно и вносить изменения в соответствующие проекты отдельно.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Документация по CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

введите описание изображения здесь

Орен
источник
1
Как это решает проблему? Pod извлечет эти источники и поместит их как проект Pods в исходный проект. Любые изменения в этих (теперь включенных через Pods) файлах не отслеживаются Git из ~ / Documents / AFNetworking, не так ли?
Радж Паван Гумдал