CocoaPods ve GitHub çatalları


108

Bu, bir GitHub projesini ilk kez çatallaştırmam ve CocoaPods konusunda da çok yetkin değilim, bu yüzden lütfen bana katlanın.

Temel olarak, aşağıdakileri kullanarak GitHub'da bir projeyi çatalladım Podfile:

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

Daha sonra çatalda bazı değişiklikler yaptım ve elbette pod installbaşka bir bölmeyi kurmak için yaptığımda orijinali yeniden REActivityViewControlleryükledi ve değişikliklerimi sildim.

Değişikliklerimi pod installçatalıma başka birinden önce itmem gerektiğini anlıyorum, ancak bunun CocoaPods tarafından kurulan bir depo olduğunu düşünürsek, çatalın kurulmakta olduğunu nasıl bilebilirim? REActivityViewControllerKlasörün altında kurulu olan klasöre baktım Podsve git dosyası yok.

Projemin dışında çatalım üzerinde çalışmam ve değişiklikleri yüklemek için CocoaPods kullanmam gerekir mi? Bu çok külfetli bir iş akışı.

Veya alt modüller ile bir şey yapmam gerekiyor mu?

Yanıtlar:


185

Bu soruya bir örnekle cevap vereceğim. Burada eklediğim bazı ekstra işlevlere sahip bir TTTAttributedLabel çatalım var:

https://github.com/getaaron/TTTAttributedLabel

Bunu bir Cocoapods projesinde kullanmak için:

  1. Değişikliklerimi çatalıma it
  2. Podfile'ımı değişiklikleri ve güncellemeleri almak için yapılandırın

Değişikliklerinizi çatalınıza aktardıktan sonra, son kaydetmenizin SHA'sını alın. Bunu kullanarak git rev-parse origin/master | pbcopyveya projeniz için GitHub taahhütleri sayfasından yapabilirsiniz : GitHub'da bir kaydetmenin SHA'sını kopyalamanın ekran görüntüsü

Ardından, Podfile'nizdeki çatalınızda aşağıdaki gibi belirli bir commit belirtebilirsiniz:

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

Bundan sonra, pod updatebu belirli commit'i fork'unuzdan güncelleyecektir. İsterseniz podspecçatalınız için bir de yapabilirsiniz , ancak bu yaklaşımı daha basit buluyorum ve yeni bir iş akışını haklı çıkarmak için yeterince sık değişiklik yapmıyorum.

Projemin dışında çatalım üzerinde çalışmam ve değişiklikleri yüklemek için Cocoapods'u kullanmam gerekir mi? Bu hantal bir iş akışı için bir yoldur.

Bunu bu şekilde yapabilirsiniz, ancak ben genellikle:

  1. Projemin içindeki kodu düzenleyin ve çalıştığından emin olun
  2. Değişiklikleri çatalıma kopyalayın,
    • bir yamayı dışa aktarmak veya
    • tüm kaynak kod dosyasının üzerine kopyalama
  3. Kaydet ve GitHub'a gönder
  4. Pod dosyasını yeni SHA ile güncelleyin
  5. Çalıştır pod update.

Veya alt modüller ile bir şey yapmam gerekiyor mu?

Hayır, gerek yok.


Takip eden soru: Öyleyse Podfile'ı yeni SHA ile güncellemek gerçekten gerekli mi? pod installEn güncel sürümü en son kaydetme ile otomatik olarak klonlamakla kalmayacak mı?
Ramsel

Projenizi farklı bir şekilde yeniden adlandırır ve kendi podspec dosyanızı oluşturursanız, kendi deponuza işaret edebilir ve pod 'MyForkName', :headbunun yerine kullanabilirsiniz .
Aaron Brager

1
:head:en yeni commit'i gösterir, ancak aynı satırda :gitve kullanamazsınız :head.
Aaron Brager

4
Bu, genel bir projenin özel bir çatalını kullanmak için mükemmel bir çözümdür. Benim durumumda, bir projeyi çatalladım ve değiştirdim ve bakımcının bu değişiklikleri birleştirmesi için açık bir PR vardı, ancak projemin Podfile'ını bu değişiklikleri hemen kullanacak şekilde güncellemek istedim. Bu harika çalıştı!
cbowns

2
@AaronBrager, "'<kapsül adı>' için bir belirtim bulunamadı" gösteriyor, bunu nasıl çözeceğinizi biliyor musunuz?
Susim Samanta

34

Diğer bir seçenek, projenizin github aracılığıyla değil, doğrudan kapsüle başvurmasını sağlamaktır. Bu şekilde, yalnızca değişikliklerinizi test etmek için çatalınızı işlemeye veya kodu kopyalayıp yapıştırmanıza gerek kalmaz. Aynı anda iki farklı Xcode projesi ile çalışabilir ve ilgili projelerine ayrı ayrı taahhüt verebilirsiniz.

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

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

görüntü açıklamasını buraya girin


1
Bu sorunu nasıl çözer? Bölme, bu kaynakları çekecek ve kaynak projede Kapsül projesi olarak yerleştirecektir. Bu dosyalara yapılan herhangi bir değişiklik (şimdi Bölmeler aracılığıyla dahil edilmiştir) '~ / Documents / AFNetworking'in Git tarafından izlenmez, değil mi?
Raj Pawan Gumdal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.