क्या स्रोत नियंत्रण के लिए प्रतिबद्ध होना चाहिए?


101

स्रोत नियंत्रण के लिए एक .sln फ़ाइल करने के लिए क्या यह सबसे अच्छा अभ्यास है? ऐसा करना कब उचित या अनुचित है?

अपडेट उत्तर में कई अच्छे बिंदु थे। प्रतिक्रियाओं के लिए धन्यवाद!


21
मेरा मानना ​​है कि यह .SUO फ़ाइल है जो आप नहीं करना चाहते हैं।
अपदित

बस रिकॉर्ड के लिए, मेरा मानना ​​है कि टास्क सूचियों (यदि आप उनका उपयोग करते हैं) को .SUO फ़ाइल में संग्रहीत किया जाता है ... तो हालांकि आप उन्हें स्रोत नियंत्रण के लिए प्रतिबद्ध नहीं करना चाहते हैं, आप शायद उन्हें केवल 'हटाना' नहीं चाहते हैं विलुप्त cruft।
बेंजोल

जवाबों:


69

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

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

संभवतः अधिक उपयोगी सवाल यह है: आपको किन फ़ाइलों को बाहर करना चाहिए? यहाँ मेरे VS 2008 परियोजनाओं के लिए मेरी .gitignore फ़ाइल की सामग्री है:

*.suo
*.user
*.ncb
Debug/
Release/
CodeAnalyst/

(अंतिम प्रविष्टि सिर्फ एएमडी कोडएनलिस्ट प्रोफाइलर के लिए है।)

वीएस 2010 के लिए, आपको निम्नलिखित को भी बाहर करना चाहिए:

ipch/
*.sdf
*.opensdf

2
यूनिट परीक्षण के परिणामों के लिए मेरे पास एक अनदेखा नियम भी है। कुछ लोग उन्हें जाँच सकते हैं, लेकिन मुझे अव्यवस्था पसंद नहीं है
मैथ्यू Whited

9
+1 - मैं व्यक्तिगत रूप से कुछ भी नहीं बनाता हूं जो निर्मित हो जाता है, इस प्रकार बिन / और obj /
स्टीवन ईवर्स

मैं केवल .sln फ़ाइलों को शामिल करता हूं, जिनमें 1 से अधिक परियोजनाएं हैं
जस्टिन

2
यहाँ मेरा तोड़फोड़ ग्लोबल इग्नोर पैटर है: * .vsmdi * .suo * / [Bb] इन [Bb] इन * / obj obj TestResults *। [यूयू] सेर * Thumbs.db * Web.biz.xml * WebApplication.Publish। एक्सएमएल * Web.log
मेरिट

यहां एक सामान्य रूप से साझा की गई .gitignore फ़ाइल है जिसमें अस्थायी फ़ाइलें शामिल हैं, परिणाम बनाते हैं, और लोकप्रिय Visual Studio ऐड-ऑन द्वारा उत्पन्न फ़ाइलें शामिल हैं।
लॉरेन वान स्लॉउन

58

हां - मुझे लगता है कि यह हमेशा उचित है। उपयोगकर्ता विशिष्ट सेटिंग्स अन्य फ़ाइलों में हैं।


3
निश्चित रूप से .sln के पास .prj फाइलों (परियोजनाओं) के संदर्भ हैं
dplante

20

हाँ आपको यह करना चाहिए। एक समाधान फ़ाइल में आपके समाधान की समग्र संरचना के बारे में केवल जानकारी होती है। यह जानकारी समाधान के लिए वैश्विक है और आपकी परियोजना के सभी डेवलपर्स के लिए आम है।

इसमें कोई उपयोगकर्ता विशिष्ट सेटिंग नहीं है।


13

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


8

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

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

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


इस तरह से लगता है कि मेरे लंबे अनुत्तरित प्रश्नों ( stackoverflow.com/questions/1490728/… ) में से एक का जवाब हो सकता है, इस प्लगइन की एक प्रति पकड़ने का कोई भी मौका?
बेंजोल

@ बैंजोल: क्षमा करें, नहीं यह एक आंतरिक उपकरण है। उपरोक्त सुविधाओं के अतिरिक्त यह कई अन्य आंतरिक प्रणालियों के साथ भी एकीकृत है, इसलिए यह बहुत विशिष्ट है कि हम चीजों को कैसे चलाते हैं। यदि आपको केवल चीजों के समाधान / परियोजना के हिस्से की आवश्यकता है तो इसे लागू करना कठिन नहीं है।
ब्रायन रासमुसेन

ठीक है, सिर्फ एक चीज, आपके 'बड़े समाधान' में आपके पास प्रोजेक्ट संदर्भ या फ़ाइल संदर्भ हैं? और अगर कोई डेवलपर किसी फ़ाइल / प्रोजेक्ट के लिए एक नया संदर्भ जोड़ता है, तो क्या प्लगइन चेक करने से पहले उचित रूपांतरण वापस करता है? और आप उन निर्भरता को कैसे संभालते हैं जो डेवलपर ने चेकआउट के लिए नहीं चुना है?
बेंजोल 27'10

8

हाँ, जो चीज़ें आपको करनी चाहिए वो हैं:

  • समाधान (*। एसएलएन),
  • प्रोजेक्ट फाइलें,
  • सभी स्रोत फ़ाइलें,
  • एप्लिकेशन कॉन्फिग फाइल
  • स्क्रिप्ट का निर्माण

जिन चीजों के लिए आपको प्रतिबद्ध नहीं होना चाहिए , वे हैं:

  • समाधान उपयोगकर्ता विकल्प (.suo) फ़ाइलें,
  • निर्मित फ़ाइलें (उदाहरण के लिए बिल्ड स्क्रिप्ट का उपयोग करके) [संपादित करें] - केवल तभी जब सभी आवश्यक स्क्रिप्ट और टूल संस्करण नियंत्रण के तहत उपलब्ध हों (यह सुनिश्चित करने के लिए कि cvs इतिहास में बिल्ड प्रामाणिक हैं)

अन्य स्वचालित रूप से उत्पन्न फ़ाइलों के संबंध में, एक अलग धागा है


1
मुझे "किसी भी स्वचालित रूप से उत्पन्न फ़ाइल" से असहमत होना होगा।
मेहरदाद अफश्री

@ मेहरदाद आपको लगता है कि Intelisense फाइलों को भी शुरू किया जाना चाहिए?
एडिसन गुस्तावो मुएंज

1
@ एडीसन: नहींं। उदाहरण के लिए, मैं LINQ से SQL डेटा के संदर्भ में ऑटो जनरेटेड सोर्स फाइल्स की बात कर रहा हूँ।
मेहरदाद अफश्री

2
Formname.Designer.cs फ़ाइलों को स्वचालित रूप से उत्पन्न माना जाता है?
जस्सो

1
मेरे कहने का मतलब बिल्ड टाइम के दौरान उत्पन्न फाइलें थीं। मुझे यह अक्सर पता चलता है - कोई व्यक्ति एक फ़ाइल का निर्माण करता है जो स्वचालित रूप से निर्मित होती है, और फिर SVN केवल एक बदलाव की रिपोर्ट करता है क्योंकि कुछ टिप्पणी बदली गई थी।
ग्रू

5

हां, यह स्रोत नियंत्रण का हिस्सा होना चाहिए। जब आप कभी भी अपने एप्लिकेशन से प्रोजेक्ट्स को जोड़ते / हटाते हैं, तो sln अपडेट हो जाएगा और इसे सोर्स कंट्रोल में रखना अच्छा होगा। यह आपको अपने एप्लिकेशन कोड 2 संस्करणों को वापस खींचने और सीधे एक बिल्ड (यदि आवश्यक हो तो) करने की अनुमति देगा।


5

ज्यादातर परिस्थितियों में, यह एक अच्छा विचार है कि .Sln फाइल को सोर्स कंट्रोल करें।

यदि आपकी .sln फाइलें किसी अन्य उपकरण (जैसे कि CMake) से उत्पन्न होती हैं, तो संभवतः उन्हें स्रोत नियंत्रण में रखना अनुचित है।


4

हां, आप हमेशा .sln फ़ाइल को शामिल करना चाहते हैं, इसमें उन सभी परियोजनाओं के लिंक शामिल हैं जो समाधान में हैं।


2

हम करते हैं क्योंकि यह सब कुछ सिंक में रखता है। सभी आवश्यक परियोजनाएं एक साथ स्थित हैं, और किसी को भी लापता होने के बारे में चिंता करने की ज़रूरत नहीं है। हमारा बिल्ड सर्वर (चींटी हिल प्रो) यह भी पता लगाने के लिए स्लैन का उपयोग करता है कि रिलीज के लिए किन परियोजनाओं का निर्माण करना है।


2

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


1

एकमात्र मामला जहां आप स्रोत नियंत्रण में इसे संग्रहीत नहीं करने पर विचार करेंगे, यदि आपके पास कई परियोजनाओं के साथ एक बड़ा समाधान था जो स्रोत नियंत्रण में था, और आप कुछ परियोजनाओं के लिए मुख्य समाधान से कुछ के साथ एक छोटा सा समाधान बनाना चाहते थे निजी क्षणिक आवश्यकता।


1

हां - आपके उत्पाद को उत्पन्न करने के लिए उपयोग की जाने वाली हर चीज स्रोत नियंत्रण में होनी चाहिए।


1

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


0

.slns केवल एक चीज है जिससे हमें tfs में कोई समस्या नहीं है !


1
यह हास्यास्पद है ... SLNs केवल फाइलें थीं जिन्हें मुझे कभी भी ठीक करना पड़ा ... लेकिन समस्याएं विलय के कारण सावधान नहीं रहने के कारण थीं।
मैथ्यू Whited
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.