Garfos CocoaPods e GitHub

108

Esta é minha primeira vez em um projeto GitHub e também não sou muito competente com CocoaPods, então, por favor, tenha paciência comigo.

Basicamente, fiz um fork de um projeto no GitHub usando o seguinte em meu Podfile:

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

Em seguida, fiz algumas alterações no fork e, claro, quando fiz pod installa instalação de outro pod, ele reinstalou o original REActivityViewControllere apagou minhas alterações.

Estou percebendo que preciso enviar minhas alterações para meu fork antes de outro pod install, mas como sei que é o fork sendo instalado, considerando que este é um repo instalado pelo CocoaPods? Eu olhei na REActivityViewControllerpasta instalada sob a Podspasta e não há nenhum arquivo git.

Preciso trabalhar em meu fork fora do meu projeto e, em seguida, usar CocoaPods para instalar as alterações? Isso é um fluxo de trabalho muito complicado.

Ou preciso fazer algo com submódulos?

Ramsel
fonte

Respostas:

185

Vou responder a essa pergunta usando um exemplo. Eu tenho um fork do TTTAttributedLabel com algumas funcionalidades extras que adicionei aqui:

https://github.com/getaaron/TTTAttributedLabel

Para usar isso em um projeto Cocoapods, eu:

  1. Empurre minhas alterações para o meu garfo
  2. Configure meu Podfile para obter as mudanças e atualizações

Depois de enviar suas alterações para o fork, obtenha o SHA de seu último commit. Você pode fazer isso usando git rev-parse origin/master | pbcopyou na página de commits do GitHub para seu projeto: Captura de tela da cópia do SHA de um commit no GitHub

Em seguida, você pode especificar o commit específico em sua bifurcação em seu Podfile assim:

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

Depois disso, pod updateirá atualizar este commit particular de seu fork. Se desejar, você também pode fazer um podspecpara seu fork, mas acho essa abordagem mais simples e não faço alterações com frequência suficiente para justificar um novo fluxo de trabalho.

Preciso trabalhar em meu fork fora do meu projeto e, em seguida, usar Cocoapods para instalar as alterações? Isso é um fluxo de trabalho complicado.

Você pode fazer assim, mas eu geralmente:

  1. Edite o código dentro do meu projeto e verifique se ele funciona
  2. Copie as alterações para o meu garfo, por
    • exportar um patch, ou
    • copiando todo o arquivo de código-fonte
  3. Enviar e enviar para GitHub
  4. Atualize o Podfile com o novo SHA
  5. Corra pod update.

Ou preciso fazer algo com submódulos?

Não, você não precisa.

Aaron Brager
fonte
Pergunta de acompanhamento: Então, atualizar o Podfile com o novo SHA é realmente necessário? pod installnão vai apenas clonar automaticamente a versão mais atualizada com o commit mais recente?
Ramsel
Se você renomear seu projeto para algo diferente e criar seu próprio arquivo podspec, poderá apontá-lo para seu próprio repositório e usá-lo pod 'MyForkName', :head.
Aaron Brager
1
:head:aponta para o commit mais recente, mas você não pode usar :gite :headna mesma linha.
Aaron Brager
4
Esta é uma solução perfeita para usar uma bifurcação personalizada de um projeto público. No meu caso, eu fiz um fork e modifiquei um projeto, e tinha um PR aberto para o mantenedor para mesclar essas mudanças, mas queria atualizar o Podfile do meu projeto para usar essas mudanças imediatamente. Isso funcionou muito bem!
cbowns de
2
@AaronBrager está mostrando "Não foi possível encontrar uma especificação para '<nome do pod>'" você sabe como resolver isso?
Susim Samanta de
34

Outra opção é fazer com que seu projeto referencie o pod diretamente e não por meio do github. Dessa forma, você não precisa continuar enviando seu fork ou copiando / colando código apenas para testar suas alterações. Você pode trabalhar com dois projetos Xcode diferentes simultaneamente e se comprometer separadamente em seus respectivos projetos.

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

Documentação do CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

insira a descrição da imagem aqui

Oren
fonte
1
Como isso resolve o problema? O Pod puxará essas fontes e os colocará como projeto de pods no projeto de origem. Quaisquer alterações nesses arquivos (agora incluídos por meio de Pods) não são rastreadas pelo Git de '~ / Documents / AFNetworking', não é?
Raj Pawan Gumdal