2010-01-31 9 views
5

मैं दो बातें करना चाहते हैं:Xcode, Git, और मध्यवर्ती निर्माण फ़ोल्डरों

  1. पूरी परियोजना recompiling बिना Xcode में Git में शाखाओं को बदलने के लिए, और फिर चला सकते हैं या बिल्ड सक्षम होने के लिए।

  2. गिट के दौरान इंटरमीडिएट बिल्ड फाइलों को अनदेखा करते हैं, इसलिए यह मुझे किसी भी विवाद को हल करने के लिए नहीं कहेंगे।

मध्यवर्ती लाना परियोजना के बाहर फ़ोल्डर बनाता है, या .gitignore का उपयोग कर उस फ़ोल्डर की अनदेखी करने, सिद्ध # 2 लेकिन # 1 नहीं; जब मैं शाखाओं को बदलता हूं, तब भी मुझे पूरी परियोजना का पुनर्निर्माण करना पड़ता है, भले ही मैंने किसी भी फाइल को संशोधित नहीं किया हो।

+0

मैं सीसीएसी का सुझाव दूंगा, लेकिन Google सुझाव देता है कि यह किसी कारण से एक्सकोड के साथ काम नहीं करता है। शायद एक और सवाल अगर यह आपका अनुभव भी है। – ergosys

+0

यदि मैं सही ढंग से समझता हूं, तो आपकी एक्सकोड बिल्ड कॉन्फ़िगरेशन शाखा से शाखा में बदल जाती है, इसलिए प्रत्येक बार हर चीज को फिर से सम्मिलित किया जाता है; आप प्रत्येक शाखा के लिए एक अलग मध्यवर्ती निर्माण डीआईआर पथ को परिभाषित करने में सक्षम होना चाहते हैं। जो मैं चाहता हूं, वह आपके जैसा है। – moala

+0

एक्सकोड 8.1.2 के लिए तेज़ी से आगे बढ़ रहा है और मुझे अभी भी इस समस्या का सामना करना पड़ रहा है भले ही बिल्ड और/या इंटरमीडिएट निर्देशिका अब डिफ़ॉल्ट रूप से प्रोजेक्ट निर्देशिका पदानुक्रम के अंदर नहीं है – Zennichimaro

उत्तर

1

ठीक है, आपने # 2 सही ढंग से उत्तर दिया है, इसलिए वास्तव में आपका प्रश्न केवल # 1 से संबंधित है। मैं वास्तव में नहीं देखता कि एक्सकोड को चीजों को फिर से कंपाइल करने की आवश्यकता क्यों होगी - गिट शाखाओं को स्विच करते समय अपरिवर्तित फ़ाइलों पर टाइमस्टैम्प नहीं बदलेगी।

क्या आपने वास्तव में # 2 समाधान लागू किया है, ताकि आपकी समस्या आपके निर्माण निर्देशिका पर गिट स्टॉम्पिंग के कारण न हो, जो .gitignore 'डी होना चाहिए?

+0

फ़ाइलें डिफ़ॉल्ट बिल्ड/फ़ोल्डर में हैं, और .gitignore बिल्ड/अनदेखा करता है। (मुझे लगता है कि ज्यादातर लोग यह करते हैं।) स्रोत फ़ाइलों को संपादित किए बिना निर्माण करते समय, गिट दिखाता है कि कुछ भी नहीं बदला है। अच्छा।मैं एक्सकोड में प्रोजेक्ट को बंद करता हूं, गिट में शाखा को बदलता हूं, और एक्सकोड में प्रोजेक्ट को फिर से खोलता हूं। बिल्ड फाइलें गिट में नहीं थीं, इसलिए वे बदले नहीं गए थे, जिसका मतलब है कि वे वर्तमान शाखा के लिए गलत बिल्ड फाइलें हैं और एक्सकोड को सब कुछ पुनर्निर्माण करना होगा। फिर मैं पहली शाखा में लौट आया और एक्सकोड को फिर से सब कुछ पुनर्निर्माण करना है। मैं समझता हूं कि क्यों एक्सकोड को पुन: संकलित करना है। –

+0

लेकिन अगर फाइलें नहीं बदली हैं (न तो सामग्री और न ही टाइमस्टैम्प में), बिल्ड फाइलें "गलत" नहीं हैं। बेशक नई शाखा अलग-अलग बिल्ड सेटिंग्स का उपयोग करती है, इस स्थिति में पुन: संकलन से बचने का कोई तरीका नहीं है। मैं एक्सकोड पर मजबूत नहीं हूं, लेकिन क्या संभवतः यह हो सकता है कि परियोजना को बंद करना और फिर से खोलना पुनर्निर्माण का कारण बनता है? –

+0

बिल्ड फाइल गलत हैं क्योंकि स्रोत फ़ाइलें अलग हैं। एक अलग शाखा में बदलना स्रोत फ़ाइलों के एक अलग सेट में बदल जाता है, लेकिन यह उनके साथ-साथ बिल्डिंग फाइलों को नहीं बदलता है; आप अभी भी पुरानी शाखा से बिल्ड फाइलों का उपयोग कर रहे हैं, और वे अलग हैं। दुविधा यह है: यदि गिट बिल्ड फ़ाइलों को अनदेखा करता है, तो जब आप शाखा बदलते हैं तो उन्हें स्विच नहीं किया जाता है और पुनर्निर्मित किया जाना चाहिए; ओटीओएच अगर गिट बिल्ड फाइलों को अनदेखा नहीं करता है, तो यह उन्हें मर्ज करने का प्रयास करता है, जिसे आप या तो नहीं चाहते हैं। –

0

एक्सकोड प्रश्न के फाइलों के टाइमस्टैम्प के आधार पर अपने सभी डेटा करने जा रहा है। यदि आप फ़ाइल को एक नई फ़ाइल के साथ प्रतिस्थापित करते हैं, तो एक्सकोड को ध्यान देना चाहिए कि फ़ाइल का टाइमस्टैम्प बिल्ड उत्पाद के टाइमस्टैम्प से नया है और इसे पुन: संकलित करता है।

हालांकि, अगर आप इसे स्रोत फ़ाइल के पुराने संस्करण के साथ बदलते हैं, तो यह नहीं पता कि बिल्ड फ़ाइल सही नहीं है। यह केवल यह देखेगा कि बिल्ड आउटपुट अभी भी स्रोत फ़ाइल से नया है, और इसलिए इसे पुन: संकलित नहीं किया गया है।

संक्षेप में, आप नहीं जानते कि कौन सी फाइलें निश्चित रूप से बदल गई हैं, और जो निश्चित रूप से नहीं है। आप सुनिश्चित करने के लिए एक पूर्ण साफ + पुनर्निर्माण करने से बेहतर हैं; अन्यथा जब आप काम नहीं करते हैं तो आप समय डिबगिंग खोने जा रहे हैं।

1

आप दो चर निर्धारित कर सकते हैं:

  • MY_BRANCH_NAME = branch_foo (प्रत्येक शाखा में रूपांतरित)
  • TARGET_TEMP_DIR = $(CONFIGURATION_TEMP_DIR)/$(TARGET_NAME)$(MY_BRANCH_NAME).build (सभी शाखाओं के लिए एक ही)

इस तरह, आपके विभिन्न शाखाओं के लिए बनाता होगा शाखाओं से शाखा कॉन्फ़िगरेशन परिवर्तन की वजह से सबकुछ पुनः संयोजित करने की आवश्यकता नहीं है, अलग फ़ोल्डरों में बनाया और रखा जाना चाहिए।

आप इसे xcconfig फ़ाइलों में कर सकते हैं, या स्वचालित रूप से MY_BRANCH_NAME को अन्य स्क्रिप्ट के साथ एक बिल्ड स्क्रिप्ट में xcodebuild तर्क के रूप में परिभाषित कर सकते हैं।

+0

मुझे यह विचार पसंद है और यह एक कोशिश करेगा। –

संबंधित मुद्दे