CocoaPods และ GitHub ส้อม


109

นี่เป็นครั้งแรกของฉันในการสร้างโครงการ GitHub และฉันก็ไม่ถนัดกับ CocoaPods ด้วยดังนั้นโปรดอดทนกับฉันด้วย

โดยทั่วไปฉันแยกโปรเจ็กต์บน GitHub โดยใช้สิ่งต่อไปนี้ในPodfile:

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

จากนั้นฉันได้ทำการเปลี่ยนแปลงบางอย่างในทางแยกและแน่นอนเมื่อฉันpod installทำการติดตั้งพ็อดอื่นมันจะติดตั้งต้นฉบับใหม่REActivityViewControllerและลบการเปลี่ยนแปลงของฉัน

ฉันรู้ว่าฉันต้องผลักการเปลี่ยนแปลงของฉันไปที่ทางแยกก่อนหน้าอื่นpod installแต่ฉันจะรู้ได้อย่างไรว่ามันกำลังติดตั้งส้อมอยู่โดยพิจารณาว่านี่คือ repo ที่ติดตั้งโดย CocoaPods? ฉันดูในREActivityViewControllerโฟลเดอร์ที่ติดตั้งไว้ใต้Podsโฟลเดอร์และไม่มีไฟล์ git ใด ๆ

ฉันต้องทำงานบนส้อมนอกโปรเจ็กต์ของฉันจากนั้นใช้ CocoaPods เพื่อติดตั้งการเปลี่ยนแปลงหรือไม่ ขั้นตอนการทำงานยุ่งยากเกินไป

หรือฉันต้องทำอะไรบางอย่างกับโมดูลย่อย?

คำตอบ:


187

ฉันจะตอบคำถามนี้โดยใช้ตัวอย่าง ฉันมีส่วนแยกของ TTTAttributedLabel พร้อมฟังก์ชันพิเศษบางอย่างที่ฉันเพิ่มที่นี่:

https://github.com/getaaron/TTTAttributedLabel

ในการใช้สิ่งนี้ในโครงการ Cocoapods ฉัน:

  1. ดันการเปลี่ยนแปลงของฉันไปที่ส้อมของฉัน
  2. กำหนดค่า Podfile ของฉันเพื่อรับการเปลี่ยนแปลงและอัปเดต

เมื่อคุณผลักดันการเปลี่ยนแปลงไปยังส้อมของคุณแล้วให้รับ SHA ของการกระทำครั้งสุดท้ายของคุณ คุณสามารถทำได้โดยใช้git rev-parse origin/master | pbcopyหรือในหน้าคอมมิต GitHubสำหรับโปรเจ็กต์ของคุณ: ภาพหน้าจอของการคัดลอก SHA ของคอมมิตบน GitHub

จากนั้นคุณสามารถระบุการกระทำเฉพาะบนส้อมของคุณใน Podfile ของคุณดังนี้:

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

หลังจากนั้นpod updateจะอัปเดตคอมมิตเฉพาะนี้จากทางแยกของคุณ หากคุณต้องการคุณสามารถสร้างpodspecFork ของคุณได้ แต่ฉันพบว่าวิธีนี้ง่ายกว่าและฉันไม่ได้ทำการเปลี่ยนแปลงบ่อยพอที่จะปรับขั้นตอนการทำงานใหม่

ฉันจำเป็นต้องทำงานบนส้อมนอกโปรเจ็กต์ของฉันจากนั้นใช้ Cocoapods เพื่อติดตั้งการเปลี่ยนแปลงหรือไม่ นั่นเป็นวิธีที่ยุ่งยากของเวิร์กโฟลว์

คุณสามารถทำได้ด้วยวิธีนี้ แต่ฉันมักจะ:

  1. แก้ไขรหัสภายในโครงการของฉันและตรวจสอบให้แน่ใจว่าใช้งานได้
  2. คัดลอกการเปลี่ยนแปลงไปยังทางแยกของฉันโดย
    • การส่งออกโปรแกรมแก้ไขหรือ
    • คัดลอกไฟล์ซอร์สโค้ดทั้งหมด
  3. ยอมรับและผลักดันไปที่ GitHub
  4. อัปเดต Podfile ด้วย SHA ใหม่
  5. pod updateวิ่ง

หรือฉันต้องทำอะไรบางอย่างกับโมดูลย่อย?

ไม่คุณไม่จำเป็นต้องทำ


คำถามติดตามผล: การอัปเดต Podfile ด้วย SHA ใหม่จึงมีความจำเป็นจริงหรือ? pod installจะไม่เพียงแค่โคลนเวอร์ชันล่าสุดโดยอัตโนมัติด้วยการกระทำล่าสุด?
Ramsel

หากคุณเปลี่ยนชื่อโปรเจ็กต์เป็นอย่างอื่นและสร้างไฟล์ podspec ของคุณเองคุณสามารถชี้ไปที่ repo ของคุณเองและใช้pod 'MyForkName', :headแทนได้
Aaron Brager

1
:head:ชี้ไปที่การกระทำใหม่ล่าสุด แต่คุณไม่สามารถใช้:gitและ:headอยู่ในบรรทัดเดียวกันได้
Aaron Brager

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' ใช่หรือไม่?
Raj Pawan Gumdal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.