हमारी टीम के सभी लोग IntelliJ IDEA का उपयोग करते हैं, और हम इसकी परियोजना फाइलों (.ipr और .iml) को स्रोत नियंत्रण में रखना उपयोगी पाते हैं ताकि हम बिल्ड कॉन्फ़िगरेशन, सेटिंग्स और निरीक्षणों को साझा कर सकें। इसके अलावा, हम टीमटिटी के साथ हमारे निरंतर एकीकरण सर्वर पर उन निरीक्षण सेटिंग्स का उपयोग कर सकते हैं। (हमारे पास प्रति-उपयोगकर्ता कार्यक्षेत्र .iws फ़ाइल में .ignignore फ़ाइल है और स्रोत नियंत्रण में नहीं है।)
हालाँकि, जब आप IDEA में किसी भी चीज़ के बारे में करते हैं, तो वे फाइलें थोड़े बदल जाती हैं। इसके लिए IDEA के समस्या डेटाबेस में एक समस्या है ( IDEA-64312 ), इसलिए शायद कोई इसे आईडिया में बग पर विचार कर सकता है, लेकिन यह एक है जिसे हमें भविष्य के लिए जीना होगा।
हाल तक तक, हम तोड़फोड़ का उपयोग कर रहे थे, लेकिन हमने हाल ही में गिट में स्विच किया। हमारे पास हर एक प्रॉजेक्ट फाइल की एक चेंज लिस्ट होने की आदत थी, जिसे हमने नजरअंदाज किया और जब तक कि प्रोजेक्ट फाइल में बदलाव नहीं हुए, जिन्हें हम दूसरों के साथ साझा करना चाहते थे। लेकिन Git के साथ, वास्तविक शक्ति प्रतीत होती है (हम जो खोज कर रहे हैं) से यह निरंतर ब्रांचिंग है जो इसे प्रोत्साहित करती है, और शाखाओं के बीच स्विच करना एक दर्द है परियोजना फाइलों के साथ हमेशा संशोधित किया गया है। अक्सर यह सिर्फ किसी भी तरह के बदलावों में विलय कर सकता है, और नई शाखा में लागू होने वाले प्रोजेक्ट फ़ाइल परिवर्तनों से निपटने की कोशिश करता है। हालाँकि, यदि नई शाखा ने प्रोजेक्ट फ़ाइल बदल दी हैं (जैसे कि शाखा एक नए मॉड्यूल पर काम कर रही है जो अभी अन्य शाखाओं में नहीं है), तो गिट सिर्फ एक त्रुटि फेंकता है कि यह नहीं होता है ' t दोनों शाखाओं में परिवर्तन होने पर फ़ाइलों में विलय करने का कोई मतलब नहीं है और आपके पास स्थानीय स्तर पर परिवर्तन हैं, और मैं इसके बिंदु को समझ सकता हूं। कमांड लाइन से, कोई भी "git चेकआउट" कमांड पर "-f" का उपयोग कर सकता है ताकि उसे स्थानीय परिवर्तनों को फेंकने और शाखा के बदले उपयोग करने के लिए मजबूर किया जा सके, लेकिन (1) GEA चेकआउट GUI कमांड IDEA (10.5.1) में ऐसा प्रतीत नहीं होता है कि एक विकल्प के रूप में, जिसे हम पा सकते हैं, इसलिए हमें नियमित रूप से कमांड लाइन पर स्विच करने की आवश्यकता होगी, और (2) हमें यकीन नहीं है कि हम इसका उपयोग करने की आदत में रहना चाहते हैं झंडा और हमारे स्थानीय परिवर्तनों को बाहर निकालने के लिए Git को बताना।
तो, यहाँ कुछ विचार हैं जिन पर हमें विकल्प हैं जिनसे हमें निपटना है:
- प्रोजेक्ट फ़ाइलों को पूरी तरह से स्रोत नियंत्रण से बाहर निकालें। उन्हें .gitignore में रखें, और उन्हें प्रत्येक व्यक्ति और TeamCity को किसी अन्य माध्यम से वितरित करें, शायद उन्हें स्रोत नियंत्रण में रखकर कहीं और या अन्य नामों से। हमारी टीम काफी छोटी है यह विकल्प विचार करने के लिए पर्याप्त है, लेकिन यह बहुत अच्छा नहीं लगता है।
- इसके साथ रहना जारी रखें, यह सुनिश्चित करने की कोशिश करें कि किसी निश्चित समय में हमारे पास कौन सी फाइलें हैं। इस के भाग के रूप में, हम प्रत्येक डेवलपर को उनके सिस्टम पर प्रत्येक प्रोजेक्ट की एक से अधिक कॉपी करने के लिए प्रोत्साहित कर सकते हैं, इसलिए वे प्रोजेक्ट फ़ाइलों के संभवतः अलग-अलग सेट के साथ एक अलग शाखा में प्रत्येक की जाँच कर सकते हैं।
- स्रोत नियंत्रण में केवल प्रोजेक्ट (.ipr) होने का प्रयास करें, मॉड्यूल (.iml) फ़ाइलों के साथ स्रोत नियंत्रण में और .gitignore फ़ाइल में नहीं। मुख्य चीज जो नियमित रूप से अपने .ipr पर स्वयं के चारों ओर स्विच करने के लिए लगती है, वह साझा बिल्ड कॉन्फ़िगरेशन का क्रम है, लेकिन हो सकता है कि हम जानकारी को अलग से साझा कर सकें कि उन्हें कैसे सेट किया जाए। मुझे यकीन नहीं है कि IDEA इस तरह की चीज़ों से कैसे निपटती है, इसकी कुछ फाइलें हालांकि, खासकर एक नए चेकआउट पर।
मुझे लगता है कि मैं उम्मीद कर रहा हूं कि हमारे द्वारा याद किए गए कुछ स्पष्ट (या गैर-स्पष्ट) समाधान हैं, शायद विशाल कस्टमिज़ेबिलिटी से निपटना जो कि Git और IDEA दोनों के लिए लगता है। लेकिन ऐसा लगता है कि हम संभवतः इस समस्या वाले एकमात्र दल नहीं हो सकते हैं। स्टैक ओवरफ्लो पर इसी तरह के प्रश्न 3495191 , 1000512 और 3873872 शामिल हैं , लेकिन मुझे नहीं पता कि वे वास्तव में एक ही मुद्दा हैं, और शायद कोई मेरे पास विभिन्न दृष्टिकोणों के लिए पेशेवरों और विपक्ष के साथ आ सकता है। उल्लिखित, उन प्रश्नों के उत्तर में सूचीबद्ध दृष्टिकोण, या दृष्टिकोण जो वे सुझाते हैं।