संस्करण नियंत्रण के अंतर्गत कौन सी ग्रहण फाइलें हैं?


242

स्पष्ट रूप से स्रोतों से हटकर, कौन सी ग्रहण फ़ाइलों को स्रोत नियंत्रण में रखना उचित है?

मेरी परियोजना में, विशेष रूप से, मैं इस बारे में सोच रहा हूँ:

.metadata / *
project-dir / .project
Project-dir / .classpath
project-dir / .settings / *

यदि इनमें से कोई भी है जिसके लिए यह निर्भर करता है, तो कृपया अपने दिशानिर्देशों को स्पष्ट करें।

जवाबों:


175

मेटाडेटा को स्रोत नियंत्रण में प्रबंधित नहीं किया जाना चाहिए। इनमें अधिकतर आपके कार्यक्षेत्र के लिए प्रासंगिक डेटा होता है ।

एकमात्र अपवाद .launchXML फ़ाइलें (लांचर परिभाषा) है।

वे में पाए जाते हैं

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

और उन्हें आपके प्रोजेक्ट डायरेक्टरी में कॉपी किया जाना चाहिए: जब आपका प्रोजेक्ट रिफ्रेश होता है, तो उन कॉन्फ़िगरेशन को "रन कॉन्फ़िगरेशन" डायलॉग में प्रदर्शित किया जाएगा।

इस तरह, उन लॉन्च पैरामीटर फ़ाइलों को SCM में भी प्रबंधित किया जा सकता है।

(चेतावनी: रन / लॉन्चिंग / लॉन्च कॉन्फ़िगरेशन वरीयता पैनल में "संबंधित संसाधन हटाए जाने पर कॉन्फ़िगरेशन हटाएं" विकल्प को अनचेक करें : किसी प्रोजेक्ट को फिर से आयात करने के लिए उसे फिर से आयात करने के लिए नरम करना-हटाना आम है - मेटाडेटा को ग्रहण करें। लेकिन यदि यह विकल्प जाँच लिया गया है, तो यह आपके विस्तृत लॉन्च मापदंडों को हटा देगा!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

आपके SCM में होना चाहिए (विशेषकर .projectऔर ग्रहण दस्तावेज़ के.classpath अनुसार )।

लक्ष्य यह है कि कोई भी अपने SCM कार्यक्षेत्र की जांच / अद्यतन कर सकता है और ग्रहण परियोजना को ग्रहण कार्यक्षेत्र में आयात कर सकता है।

उसके लिए, आप लिंक किए गए संसाधनों का उपयोग करके, अपने .classpath में केवल सापेक्ष पथ का उपयोग करना चाहते हैं ।

नोट: यह project-dirएक "बाहरी" परियोजना निर्देशिका को संदर्भित करता है तो बेहतर है , न कि ग्रहण कार्यक्षेत्र के तहत बनाई गई निर्देशिका। इस तरह, दो धारणाएं (ग्रहण कार्यक्षेत्र बनाम SCM कार्यक्षेत्र) स्पष्ट रूप से अलग हो जाती हैं।


जैसा कि ipsquiggle ने टिप्पणी में उल्लेख किया है, और जैसा कि मैंने एक पुराने उत्तर में कहा है , आप वास्तव में लॉन्चिंग कॉन्फ़िगरेशन को साझा फ़ाइल के रूप में सीधे अपनी परियोजना निर्देशिका में सहेज सकते हैं । सभी लॉन्चिंग कॉन्फ़िगरेशन को तब अन्य प्रोजेक्ट फ़ाइलों की तरह संस्करणबद्ध किया जा सकता है।

(ब्लॉग पोस्ट टिप से: केडी से लॉन्च कॉन्फ़िगरेशन बनाना और साझा करना )

वैकल्पिक शब्द


16
(IMO) .launch फ़ाइलों के लिए कुछ भी .metadata के साथ काम करने के लिए बहुत बेहतर काम प्रवाह है, जब आप commonटैब पर एक लॉन्च कॉन्फ़िगरेशन को संपादित करते हैं , तो चुनें Save as > shared file। यह सीधे प्रोजेक्ट फ़ोल्डर में इसे छोड़ देता है, इसलिए यह बाकी प्रोजेक्ट के साथ SCM'd हो सकता है।
१६:०६

3
SCM में क्यों होना चाहिए? उदाहरण के लिए, मैं एक कोड मैट्रिक्स टूल का उपयोग करना चाहता हूं जो सक्षम होने पर .project में परिवर्तन का कारण बनता है। मैं इस परियोजना के सभी उपयोगकर्ताओं पर बल नहीं देना चाहता।
jfritz42

8
@ jfritz42: यदि आप केवल आपके लिए एक स्थानीय और समयनिष्ठ परिवर्तन को मान्य करते हैं, तो उस संस्करण .projectको केवल अपने कार्यक्षेत्र के लिए अनदेखा कर दें। लेकिन आम ग्रहण परियोजना की परिभाषा के सभी अन्य उपयोगकर्ताओं को वंचित न करें, वे जल्दी से अपने ग्रहण कार्यक्षेत्र में आयात कर सकते हैं, सिर्फ इसलिए कि आपके पास एक अतिरिक्त परिभाषा है जो कि केवल आपकी आवश्यकता के अनुरूप होगी।
VonC

7
धन्यवाद। मैं उन लिंक्स का ध्यानपूर्वक अध्ययन करूँगा, लेकिन पहले से ही मैं ध्यान देता हूँ कि आपके पहले लिंक में एक उत्तर "निश्चित रूप से हाँ" शुरू होता है, जबकि बहुत ही अगला "निश्चित रूप से नहीं" शुरू होता है। Google अलग-अलग, नौसिखिया-अमित्र सलाह से भरा है। मैं लक्ष्य को समझता हूं, लेकिन इस मुद्दे को कैसे उठाया जाए। मैं Xcode से आता हूं, जहां स्रोत और उपयोगकर्ता विकल्प Xcode- जनरेट और कंपाइलर-जनरेट आउटपुट से अलग-अलग होते हैं, ताकि इस प्रश्न का सरल उत्तर हो। ग्रहण नौसिखिया के लिए, यह प्रतीत होता है कि उन फ़ाइलों को एक साथ मिलाया जाता है और इसके बारे में बिखरा हुआ है। मैं एक साधारण समझने योग्य उत्तर की तलाश में हूँ
garyp

3
मैं VisualStudio भूमि से आता हूं, और मैं यहां दूसरा @garyp आता हूं - यह वास्तव में एक गर्म गड़बड़ है - यदि ग्रहण को अस्थायी और / या अनावश्यक-टू-ट्रैक प्रति-उपयोगकर्ता फ़ाइलों को बनाने की आवश्यकता है, तो उन्हें कहीं और रखना चाहिए, ताकि परियोजना और निर्माण परिभाषाओं को ट्रैक किया जा सकता है और सभी अस्थायी कचरा रास्ते में नहीं मिलता है। कहीं ग्रहण टीम से कहीं अधिक आधिकारिक मार्गदर्शन नहीं है? (यह स्पष्ट है कि ग्रहण टीम इकाई परीक्षण नहीं करती है [या यदि वे करते हैं, तो वे इसे प्रभावी ढंग से नहीं करते हैं] लेकिन कम से कम मुझे बताएं कि वे स्रोत नियंत्रण का उपयोग करते हैं! XD)
BrainSlugs83

19

मैं वर्तमान में एक परियोजना पर काम कर रहा हूँ जहाँ हमारे पास .project और .cproject फ़ाइलें स्रोत नियंत्रण में हैं। यह विचार था कि लाइब्रेरी पथ और लिंक निर्देशों से संबंधित सेटिंग्स टीम भर में प्रचारित करेंगी।

व्यवहार में, यह बहुत अच्छी तरह से काम नहीं करता है, विलय लगभग हमेशा एक विवादित स्थिति में वापस आ जाता है जिसे ग्रहण के बाहर विघटित होने की आवश्यकता होती है और फिर परिवर्तन को प्रभावी करने के लिए परियोजना बंद हो जाती है और फिर से खुल जाती है।

मैं उन्हें सोर्स कंट्रोल में रखने की सलाह नहीं दूंगा।


14

यह कुछ भी नहीं लायक है कि सीडीटी कॉन्फ़िगरेशन फ़ाइलें स्रोत-नियंत्रण-अनुकूल नहीं हैं। बग के लिए दायर बग .cproject फाइलें बहुत बार बदलती हैं और टकराव का कारण बनती हैं, देखें कि रिपोजिटरी में सीडीटी-प्रोजेक्ट फाइलों को साझा करने से हमेशा टकराव होता है


Yikes - यह बग छह साल पुराना है और अभी भी छुआ नहीं गया है। स्पष्ट रूप से स्रोत नियंत्रण समर्थन ग्रहण टीम के लिए प्राथमिकता नहीं है!
BrainSlugs83

2
यह भी ध्यान दिया जाना चाहिए कि .cproject फ़ाइल में कॉन्फ़िगरेशन जानकारी है जो आप अन्य डेवलपर्स को मैन्युअल रूप से फिर से बनाने के लिए बाध्य नहीं करेंगे। ओह।
क्रिस्टोफर नाई

7

कुछ परियोजनाएं, मावेन का उपयोग करने वालों की तरह, POMs के आधार पर .project फ़ाइलें उत्पन्न करना।

उस ने कहा, इसके अलावा - .metadata स्रोत नियंत्रण में नहीं होना चाहिए। आपकी परियोजना को इस बारे में एक निर्णय लेना होगा कि क्या आप प्रोजेक्टर्ड / .सेटिंग करते हैं, इस आधार पर कि आप मानकों और इस तरह के प्रबंधन की योजना कैसे बनाते हैं। अगर आप मानक के आधार पर अपने पर्यावरण को स्थापित करने के लिए अपने डेवलपर्स पर ईमानदारी से भरोसा कर सकते हैं, और आपको किसी भी परियोजना के लिए कुछ भी विशेष रूप से अनुकूलित करने की आवश्यकता नहीं है, तो आपको उन्हें मुझे लगाने की आवश्यकता नहीं है। मैं, हर परियोजना को विशेष रूप से कॉन्फ़िगर करने की सलाह देता हूं। । यह एक ही कार्यक्षेत्र में कई प्रोजेक्ट्स के सामानों को डिफॉल्ट सेटिंग्स को बदलने के बिना एक ही कार्यक्षेत्र में काम करने की अनुमति देता है, और यह सेटिंग्स को बहुत स्पष्ट करता है, जो कि उनकी डिफ़ॉल्ट सेटिंग्स प्रोजेक्ट के मानकों से मेल खाने के लिए होती हैं।

केवल कठिन हिस्सा सुनिश्चित कर रहा है कि वे सभी सिंक में रहें। लेकिन ज्यादातर मामलों में आप परियोजना से परियोजना के लिए .settings फ़ाइलों को कॉपी कर सकते हैं। यदि कोई है जो आप विशेष रूप से स्रोत नियंत्रण में नहीं चाहते हैं, तो svn को सेट करने के बराबर करें: उनके लिए उपेक्षा करें, अगर आपका SCM समर्थन करता है।


2
हम मावेन 1 और 2 का उपयोग करते हैं, और यह केवल .project फ़ाइल उत्पन्न करता है यदि आप इसे पूछते हैं। और यहां तक ​​कि अगर आप करते हैं, तो यह पीओएम की सामग्री के आधार पर ऐसा करता है, इसलिए यदि कोई अन्य डेवलपर आपके लिए पहले ही कदम उठा चुका है और परिणाम को संस्करण नियंत्रण में जांच लिया है, तो इसका लाभ क्यों नहीं उठाया जाए?
एंड्रयू स्वान

6

.Classpath फ़ाइल निश्चित रूप से scm में जांच के लिए एक अच्छा उम्मीदवार है क्योंकि इसे हाथ से सेट करना बहुत काम हो सकता है और परियोजना में नए देवों के लिए मुश्किल होगा। यह सच है कि यह अन्य स्रोतों से उत्पन्न हो सकता है, जिस स्थिति में आप दूसरे स्रोत में जांच करेंगे।

के रूप में .settings के लिए, यह सेटिंग्स पर निर्भर करता है। यह एक ग्रे क्षेत्र है, लेकिन कुछ सेटिंग्स लगभग अनिवार्य हैं और यह एक परियोजना की जांच करने में सक्षम होने के लिए सुविधाजनक है, इसे ग्रहण में आयात करें और सब कुछ सेट करें और जाने के लिए अच्छा है।

हमारे प्रोजेक्ट में, इसलिए हम CVS.settings नामक .settings फ़ोल्डर की एक प्रति बनाए रखते हैं और हमारे पास इसे tosettings को कॉपी करने के लिए एक कार्य है। जब आपको सीवीएस से प्रोजेक्ट मिलता है, तो आप नए .settlet फ़ोल्डर में डिफ़ॉल्ट सेटिंग्स को कॉपी करने के लिए 'eclipsify' चींटी कार्य कहते हैं। जब आप उन सेटिंग्स को कॉन्फ़िगर करते हैं जो प्रोजेक्ट पर विकसित होने वाले सभी के लिए आवश्यक होती हैं, तो आप उन सीवीएस.सेटिंग्स फ़ोल्डर में वापस मर्ज करते हैं और सीवीएस के लिए प्रतिबद्ध होते हैं। इस तरह से SCM में सेटिंग सेव करना एक सचेत प्रक्रिया बन जाती है। यह समय-समय पर उन सेटिंग्स को अपने .settings फ़ोल्डरों में मर्ज करने की आवश्यकता होती है जब बड़े बदलावों की जाँच की जाती है। लेकिन यह एक सरल प्रणाली है जो आश्चर्यजनक रूप से अच्छी तरह से काम करती है।


4

मैं उनमें से कोई नहीं कहूँगा। वे सबसे अधिक संभावना जानकारी रखते हैं जो केवल आपके कार्य केंद्र (मैं पुस्तकालयों और सभी के लिए पथों के बारे में सोच रहा हूं) के लिए प्रासंगिक है। इसके अलावा अगर आपकी टीम में कोई व्यक्ति ग्रहण का उपयोग नहीं कर रहा है तो क्या होगा?


3
नहीं, आप अपने .classpath में सापेक्ष पथ रख सकते हैं। Stackoverflow.com/questions/300328#300346 देखें ।
VonC

7
अगर वे एक ही देव का उपयोग नहीं कर रहे हैं, तो एक सुंदर / अक्षम टीम की तरह लगता है। उपकरण, परियोजना, डिबग, और निर्माण परिभाषाएँ, आदि - आगे आप मुझे एक सामान्य कोडिंग मानक या JDK का उपयोग नहीं करने के लिए बताने जा रहे हैं। - आदर्श रूप से, एक उपयोगकर्ता को स्रोत नियंत्रण से एक परियोजना को खींचने में सक्षम होना चाहिए और बहुत सारे अतिरिक्त सेटअप या निर्देशों के बिना सही तरीके से कूदना चाहिए। तो यह जवाब मेरे लिए सिर्फ सादा अस्वीकार्य है।
BrainSlugs83

1
यह एक विलय के दौरान वरीयता फ़ाइलों में संघर्ष से निपटने के लिए अधिक अक्षम है, सिर्फ इसलिए कि किसी ने नए कार्यक्षेत्र से परियोजना को खोला - यह बड़ी परियोजनाओं में एक बुरा सपना है। इसके अलावा, एक ही IDE के साथ एक ही कॉन्फ़िगरेशन का उपयोग करने के लिए मजबूर करना एक अनावश्यक प्रतिबंध की तरह लगता है।
ए। रोडास

मैं इससे सहमत हूं [~ agnul]। प्रोजेक्ट्स को कुछ बिल्ड टूल (gradle, maven, ant, आदि ...) का उपयोग करना चाहिए और IDE बिल्ड टूल कॉन्फ़िगरेशन फ़ाइल (build.gradle, pom.xml, build.xml) से प्रोजेक्ट को खोलने और कॉन्फ़िगर करने में सक्षम होना चाहिए, आदि ...) कोई आईडीई फाइलें संस्करण नियंत्रित नहीं होनी चाहिए। वे सभी डेवलपर विशिष्ट फाइलें हैं, न कि विशिष्ट फाइलें। वे सरल संस्करण नियंत्रण में नहीं हैं।
स्वयंसिद्ध

2

विचार करें:

.classpath
.project
.launch

जब तक आप प्रोजेक्ट-सापेक्ष पथ का उपयोग करने के लिए चिपक जाते हैं, ये संस्करण नियंत्रण में होंगे। यह अन्य डेवलपर्स को परियोजना की जांच करने और तुरंत काम शुरू करने की अनुमति देता है बिना सभी सेटअप दर्द से गुजरने के जो कि अन्य डेवलपर्स के माध्यम से गए।

आपको संस्करण नियंत्रण में .metadata को शामिल करने का प्रलोभन दिया जा सकता है और साथ ही ग्रहण डेवलपर्स एक संपूर्ण कार्यक्षेत्र की जांच कर सकते हैं और इसे सभी सही परियोजनाओं के साथ प्री-कॉन्फ़िगर किया गया है, लेकिन इसमें बहुत से उपयोगकर्ता विशिष्ट जानकारी शामिल है जो कभी भी किसी पर भी काम करती है, यह होगा परिवर्तन, इसलिए मैं नहीं सलाह देना चाहिए। केवल सभी मौजूदा ग्रहण परियोजनाओं को आयात करके स्थानीय कार्यक्षेत्र बनाना आसान है।


मेरे अनुभव में यह विभिन्न तरीकों से टूटता है जब आप ग्रहण को एक नए संस्करण में अपडेट करते हैं, या जायके के बीच स्विच करते हैं।
थोरबजोरन रेव एंडरसन

1

मैंने नए सहयोगियों (और खुद) के लिए ग्रहण कार्यक्षेत्र सेटिंग्स को कॉन्फ़िगर करने में कई घंटे बिताए हैं। आखिरकार मैंने जो किया, वह अपनी खुद की .metadata को नए डेवलपर मशीन में कॉपी कर रहा था।

यदि आप एक टीम पर काम कर रहे हैं, तो मुझे लगता है कि संस्करण नियंत्रण में रखने के लिए निम्नलिखित बहुत अच्छे उम्मीदवार हैं:

  • स्थापित JRE और उनके नाम
  • सर्वर रनटाइम वातावरण
  • Java Editor Templates
  • संस्करण नियंत्रण कीबोर्ड शॉर्टकट
  • प्लगइन सेटिंग्स जो परियोजना विशिष्ट सेटिंग्स प्रदान नहीं करती हैं
  • मावेन सेटिंग्स
  • पूर्वनिर्धारित परिप्रेक्ष्य
  • ...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.