Horquillas CocoaPods y GitHub

108

Esta es la primera vez que bifurco un proyecto de GitHub, y tampoco soy muy competente con CocoaPods, así que tengan paciencia conmigo.

Básicamente, bifuré un proyecto en GitHub usando lo siguiente en mi Podfile:

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

Luego hice algunos cambios en la bifurcación y, por supuesto, cuando hice una pod installpara instalar otro pod, reinstalé el original REActivityViewControllery borré mis cambios.

Me estoy dando cuenta de que necesito enviar mis cambios a mi bifurcación antes que a otro pod install, pero ¿cómo sé si es la bifurcación que se está instalando, considerando que este es un repositorio instalado por CocoaPods? Busqué en la REActivityViewControllercarpeta instalada debajo de la Podscarpeta y no hay ningún archivo git.

¿Necesito trabajar en mi bifurcación fuera de mi proyecto y luego usar CocoaPods para instalar los cambios? Es un flujo de trabajo demasiado engorroso.

¿O necesito hacer algo con los submódulos?

Ramsel
fuente

Respuestas:

185

Responderé a esta pregunta con un ejemplo. Tengo una bifurcación de TTTAttributedLabel con algunas funciones adicionales que agregué aquí:

https://github.com/getaaron/TTTAttributedLabel

Para usar esto en un proyecto Cocoapods, yo:

  1. Empuja mis cambios a mi tenedor
  2. Configurar mi Podfile para obtener los cambios y la actualización

Una vez que haya enviado sus cambios a su bifurcación, obtenga el SHA de su última confirmación. Puede hacer esto usando git rev-parse origin/master | pbcopyo en la página de confirmaciones de GitHub para su proyecto: Captura de pantalla de la copia del SHA de una confirmación en GitHub

Luego, puede especificar la confirmación específica en su bifurcación en su Podfile de esta manera:

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

Después de eso, pod updateactualizará esta confirmación en particular desde su bifurcación. Si lo desea, también puede hacer un podspecpara su bifurcación, pero encuentro este enfoque más simple y no hago cambios con la frecuencia suficiente para justificar un nuevo flujo de trabajo.

¿Necesito trabajar en mi bifurcación fuera de mi proyecto y luego usar Cocoapods para instalar los cambios? Eso es demasiado engorroso de un flujo de trabajo.

Puedes hacerlo de esta manera, pero yo normalmente:

  1. Edite el código dentro de mi proyecto y asegúrese de que funcione
  2. Copie los cambios en mi bifurcación, por
    • exportar un parche, o
    • copiar todo el archivo de código fuente
  3. Confirmar y enviar a GitHub
  4. Actualice el Podfile con el nuevo SHA
  5. Corre pod update.

¿O necesito hacer algo con los submódulos?

No, no es necesario.

Aaron Brager
fuente
Pregunta de seguimiento: ¿Entonces es realmente necesario actualizar el Podfile con el nuevo SHA? pod install¿No clonará automáticamente la versión más actualizada con la última confirmación?
Ramsel
Si cambia el nombre de su proyecto a algo diferente y crea su propio archivo podspec, puede apuntarlo a su propio repositorio y usarlo pod 'MyForkName', :headen su lugar.
Aaron Brager
1
:head:apunta a la confirmación más reciente, pero no puede usar :gity :headen la misma línea.
Aaron Brager
4
Esta es una solución perfecta para usar una bifurcación personalizada de un proyecto público. En mi caso, bifurqué y modifiqué un proyecto, y tenía un PR abierto para que el mantenedor fusionara esos cambios, pero quería actualizar el Podfile de mi proyecto para usar esos cambios de inmediato. ¡Esto funcionó muy bien!
cbowns
2
@AaronBrager muestra "No se puede encontrar una especificación para '<nombre de pod>'", ¿sabe cómo resolverlo?
Susim Samanta
34

Otra opción es hacer que su proyecto haga referencia al pod directamente y no a través de github. De esta manera, no tiene que seguir confirmando su bifurcación o copiando / pegando código solo para probar sus cambios. Puede trabajar con dos proyectos Xcode diferentes simultáneamente y comprometerse por separado en sus respectivos proyectos.

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

Documentación de CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

ingrese la descripción de la imagen aquí

Oren
fuente
1
¿Cómo soluciona esto el problema? El Pod extraerá estas fuentes y las colocará como proyecto de Pods en el proyecto de origen. Cualquier cambio en estos archivos (ahora incluidos a través de Pods) no es rastreado por Git de '~ / Documents / AFNetworking', ¿no es así?
Raj Pawan Gumdal