कोकोपोड्स और गिटहब कांटे


108

यह पहली बार GitHub परियोजना के लिए धन्यवाद है, और मैं CocoaPods के साथ बहुत सक्षम नहीं हूं, इसलिए कृपया मुझे सहन करें।

मूल रूप से, मैंने अपने में निम्नलिखित का उपयोग करके गिटहब पर एक परियोजना को लिया Podfile:

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

मैंने तब कांटा में कुछ बदलाव किए, और निश्चित रूप से जब मैंने एक pod installऔर पॉड स्थापित करने के लिए किया, तो उसने मूल को फिर से स्थापित किया REActivityViewControllerऔर मेरे बदलावों को मिटा दिया।

मुझे एहसास हो रहा है कि मुझे अपने कांटे को अपने कांटे को दूसरे से पहले धकेलना होगा pod install, लेकिन मुझे कैसे पता चलेगा कि यह स्थापित किया जा रहा कांटा है, यह देखते हुए कि यह कोकोआपोड्स द्वारा स्थापित रेपो है? मैंने REActivityViewControllerफ़ोल्डर के नीचे स्थापित फ़ोल्डर में देखा Podsऔर कोई भी गिट फाइल नहीं है।

क्या मुझे अपनी परियोजना के बाहर अपने कांटे पर काम करने की आवश्यकता है और फिर परिवर्तनों को स्थापित करने के लिए कोकोपोड्स का उपयोग करें? यह भी एक कार्यप्रवाह का बोझिल है।

या क्या मुझे सबमॉड्यूल के साथ कुछ करने की ज़रूरत है?

जवाबों:


185

मैं एक उदाहरण का उपयोग करके इस प्रश्न का उत्तर दूंगा। मेरे पास यहाँ जोड़े गए कुछ अतिरिक्त कार्यक्षमता के साथ TTTAttributedLabel का एक कांटा है:

https://github.com/getaaron/TTTAttributedLabel

कोकोपोड्स परियोजना में इसका उपयोग करने के लिए, मैं:

  1. मेरे कांटे को मेरे परिवर्तन धक्का
  2. परिवर्तन और अद्यतन प्राप्त करने के लिए मेरे पॉडफाइल को कॉन्फ़िगर करें

एक बार जब आप अपने कांटे को अपने परिवर्तनों को धकेल देते हैं, तो अपने अंतिम प्रतिबद्ध का SHA प्राप्त करें। आप इसे अपने प्रोजेक्ट के लिए GitHub कमिट पृष्ठ का उपयोग करके git rev-parse origin/master | pbcopyया कर सकते हैं : GitHub पर एक प्रतिबद्ध SHA की प्रतिलिपि बनाने का स्क्रीनशॉट

फिर, आप इस तरह से अपने Podfile में अपने कांटे पर विशिष्ट प्रतिबद्ध निर्दिष्ट कर सकते हैं:

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

उसके बाद, pod updateअपने कांटे से इस विशेष प्रतिबद्ध को अद्यतन करेगा। यदि आप चाहें, तो आप podspecअपने कांटे के लिए भी बना सकते हैं , लेकिन मुझे यह तरीका सरल लगता है और मैं एक नए वर्कफ़्लो को सही ठहराने के लिए अक्सर बदलाव नहीं करता।

क्या मुझे अपनी परियोजना के बाहर अपने कांटे पर काम करने की आवश्यकता है और फिर परिवर्तनों को स्थापित करने के लिए कोकोपोड्स का उपयोग करें? यह एक कार्यप्रवाह के बोझिल करने के लिए रास्ता है।

आप इसे इस तरह से कर सकते हैं, लेकिन मैं आमतौर पर:

  1. मेरी परियोजना के अंदर कोड संपादित करें और सुनिश्चित करें कि यह काम करता है
  2. मेरे कांटे पर परिवर्तनों को कॉपी करें, द्वारा
    • एक पैच निर्यात, या
    • संपूर्ण स्रोत कोड फ़ाइल पर प्रतिलिपि बनाना
  3. कमिट और GitHub को धक्का
  4. नए SHA के साथ पॉडफाइल को अपडेट करें
  5. दौड़ो pod update

या क्या मुझे सबमॉड्यूल के साथ कुछ करने की ज़रूरत है?

नहीं, आपको जरूरत नहीं है


अनुवर्ती सवाल: तो नए SHA के साथ पॉडफाइल को अपडेट करना वास्तव में आवश्यक है? pod installनवीनतम प्रतिबद्ध के साथ केवल सबसे अद्यतित संस्करण को स्वचालित रूप से क्लोन नहीं किया जाएगा?
रामसेल

यदि आप अपनी परियोजना का नाम कुछ अलग करते हैं और अपनी स्वयं की पॉडसेक फ़ाइल बनाते हैं, तो आप इसे अपने स्वयं के रेपो में इंगित कर सकते हैं और pod 'MyForkName', :headइसके बजाय उपयोग कर सकते हैं।
आरोन ब्रेजर

1
:head:नवीनतम अंक के लिए प्रतिबद्ध है, लेकिन आप उपयोग नहीं कर सकते :gitऔर :headएक ही पंक्ति में।
आरोन ब्रेजर

4
किसी सार्वजनिक प्रोजेक्ट के कस्टम कांटे का उपयोग करने के लिए यह एक सही समाधान है। मेरे मामले में, मैंने एक परियोजना को कांटा और संशोधित किया, और उन परिवर्तनों को मर्ज करने के लिए अनुरक्षक के लिए एक खुला पीआर था, लेकिन उन परिवर्तनों का तुरंत उपयोग करने के लिए अपनी परियोजना के पॉडफाइल को अपडेट करना चाहता था। यह महान काम किया!
cbowns

2
@AaronBrager यह दिखा रहा है "" <फली नाम> 'के लिए एक विनिर्देश खोजने में असमर्थ "क्या आप जानते हैं कि इसे कैसे हल किया जाए?
सुसीम सामंता

34

एक अन्य विकल्प यह है कि आपके प्रोजेक्ट को सीधे पॉड का संदर्भ दिया जाए न कि जीथब के जरिए। इस तरह आपको अपने परिवर्तनों का परीक्षण करने के लिए अपने कांटे या कोडिंग / पेस्टिंग कोड को रखने की आवश्यकता नहीं है। आप एक साथ दो अलग-अलग Xcode प्रोजेक्ट्स के साथ काम कर सकते हैं और अपने-अपने प्रोजेक्ट्स में अलग-अलग कर सकते हैं।

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

CocoaPods दस्तावेज़ीकरण: http://guides.cocoapods.org/using/the-podfile.html#use-the-files-from-a-folder-local-to-the-machine

यहां छवि विवरण दर्ज करें


1
यह समस्या का समाधान कैसे करता है? पॉड इन स्रोतों को खींचेगा और उन्हें स्रोत परियोजना में पॉड्स प्रोजेक्ट के रूप में रखेगा। इनमें से कोई भी परिवर्तन (अब पॉड्स के माध्यम से शामिल) फाइलें '~ / दस्तावेज / AFNetworking' के Git द्वारा ट्रैक नहीं की जाती हैं, है ना?
राज पवन गुमडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.