2010-04-21 11 views
19

में स्रोत कोड व्यवस्थित करना हमने अभी टीएफएस 2010 को ऊपर और चल रहा है। हम अपने स्रोत को टीएफएस में माइग्रेट कर देंगे लेकिन मेरे पास कोड व्यवस्थित करने के बारे में एक सवाल है।टीएफएस 2010

टीएफएस 2010 में परियोजना संग्रह की एक नई अवधारणा है इसलिए मैंने फैसला किया है कि हमारे संगठन के विभिन्न समूहों को अपना समूह मिल जाएगा। मेरी टीम कई अलग-अलग वेब अनुप्रयोग विकसित करती है और हमारे पास कई साझा घटक हैं। हम कुछ तीसरे पक्ष के घटकों (जैसे टेलरिक) का भी उपयोग करते हैं।

स्पष्ट रूप से प्रत्येक वेब एप्लिकेशन यह स्वयं का प्रोजेक्ट है लेकिन मैं साझा घटक कहां रखूं? क्या प्रत्येक घटक अलग-अलग निर्माण और कार्य वस्तुओं के साथ अपने स्वयं के प्रोजेक्ट में होना चाहिए?

क्या टीएफएस 2010 के लिए यह विशिष्ट करने का सबसे अच्छा अभ्यास या अनुशंसित तरीका है?

उत्तर

13

इसके लिए सबसे अच्छा अभ्यास आपके मुख्य/ट्रंक फ़ोल्डर के तहत समाधान बनाने के लिए आवश्यक सब कुछ है। एक ही स्तर पर

"Project 1" 
    "DEV" (Folder) 
     "Feature 1" (Branch) 
     "Main" (Root branch) 
    "Release" (Folder) 
     "Release 1" (Branch) 
    "RTM" (Folder) 
     "Release 1.0" (Branch) 
     "Release 1.1" (Branch) 

यह रहता है अपने शाखाओं के सभी ताकि आप किसी भी संदेह के रूप में जो एक शाखा है करने के लिए और जो एक फ़ोल्डर है की जरूरत नहीं है: हम निम्न स्वरूप का उपयोग।

शाखाओं में से प्रत्येक के तहत अपने टीम परियोजना संरचना है कि है, लेकिन के बारे में वास्तविक फ़ोल्डर संरचना क्या:

Main (Root branch) 
    "Builds" (Folder that contains all of the MSBuild and Workflows for building) 
    "Documents" (Folder that contains version specific documents) 
    "Deployment" (Folder that contains config required for deployment | We use TFS Deployer from Codeplex) 
    "Setup" (Folder contains all of the setup resources) 
    "[Company].[Namespace].*" (Folders that contains a project) 
    "Tools" (Folder for all your nuts and bolts) 
    "Toolname" (Folder for a specific tool or reference library) 

विचार यह है कि यह एक बाहरी उत्पाद का एक नया संस्करण का उपयोग करने के लिए कि क्या टीम की पसंद है या संदर्भ पुस्तकालय। सिर्फ इसलिए कि एक टीम एनयूनीट के एक नए संस्करण में अपग्रेड कर सकती है इसका मतलब यह नहीं है कि एक और टीम काम नहीं करती है क्योंकि यह काम के सप्ताह है।

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

संदर्भ:TFS Deployer

+0

क्या आप यह इंगित करने के लिए संरचना को अपडेट कर सकते हैं कि आपकी .sln और .csproj फ़ाइलें कहां स्थित हैं? मेरे पास वर्तमान में एक परिदृश्य है जहां हमारे पास प्रति तैनाती योग्य वस्तु (विंडोज सेवा, या वेब अनुप्रयोग) का समाधान है, और इनमें से प्रत्येक समाधान के अंदर परियोजनाओं पर निर्भर हो सकता है (उदाहरण के लिए एक समाधान में एक इंटरफेस प्रोजेक्ट को किसी अन्य समाधान में किसी अन्य प्रोजेक्ट द्वारा संदर्भित किया जा रहा है)। क्या आपका सुझाव इस के लिए पूरा करता है?वर्तमान में हम एक ज्ञात स्थान पर निर्माण करते समय वितरित करने योग्य असेंबली की प्रतिलिपि बनाते हैं, और अन्य परियोजनाओं पर पूर्व-निर्माण जो हम निर्भरताओं में प्रतिलिपि बनाते हैं और प्रतिलिपि का संदर्भ देते हैं। – jamiebarrow

5

मेरे पास दो उत्तर हैं: हम क्या करते हैं और मैं आपके लिए क्या सुझाव देता हूं।

हमारे लिए, हमारे पास वेब ऐप्स का एक सूट है जिसमें सभी के पास कई साझा घटक हैं। इस प्रकार, हालांकि यह लगभग 50 विभिन्न असेंबली (वीएस प्रोजेक्ट्स) और 5-10 समाधान (आप इसे कैसे देखते हैं इसके आधार पर) हैं, उन सभी में बहुत महत्वपूर्ण ओवरलैप है जिसका अर्थ है कि हम टीएफएस प्रति-देव विलय का उपयोग करना चाहते हैं उन अतिव्यापी संसाधनों को ब्रांचिंग और विलय करने से। इस प्रकार, हम वास्तव में यह सब एक ही टीएफएस परियोजना में रखते हैं। यहाँ है कि कैसे हम हमारे सेटअप (समझ बनाने के लिए बदल गया नाम आपके लिए) है:

"Official Projects" (Collection) 
    "Production Applications" (Project) 
    "Technology Proof of Concepts" (Project) 
    "Reference Projects" (Project) - this is a simple solution/projects using our architecture to make our architecture easier to understand as people join our team. Other reference apps will go here in the future. 
    "TFS Configuration" (Project) 
"Playground" (Collection) 
    "John Doe" (Project) 
    "Jane Doe" (Project) 
    "Security Team" (Project) 
    "Production Test" (Project) 

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

हालांकि, आपके परिदृश्य में, यदि मैं सही ढंग से लाइनों के बीच पढ़ रहा हूं, तो मैं कुछ अलग सुझाव दूंगा। मेरे मान्यताओं:

  1. प्रत्येक परियोजना, एक तरफ कुछ सामान्य विधानसभाओं होने से (मैं प्रवेश, सुरक्षा, और अन्य उपयोगिता विधानसभाओं कि साझा कर रहे हैं कंपनी के व्यापक सोच रहा हूँ), असंबद्ध प्रोजेक्ट कर रहे हैं।
  2. साझा/आम असेंबली नियमित रूप से नहीं बदला जा रहा है ताकि आप परियोजना संदर्भों के बजाय डीएलएल संदर्भों का उपयोग कर सकें जहां आप हमेशा कोड के नवीनतम अप-टू-मिनट/दिन संस्करण का उपयोग कर रहे हैं।
  3. (टीएफएस-आधारित धारणा के रूप में मैं अभी भी सीख रहा हूं) आप एक ही संग्रह से परियोजनाओं में शाखा बना सकते हैं लेकिन आप संग्रहों में शाखा नहीं बना सकते हैं।
  4. उपर्युक्त साझा असेंबली के अलावा, टीमों में कोई अन्य कोड साझा नहीं किया जाता है।

तो इन मान्यताओं के साथ, मैं कुछ इस तरह के साथ जाना होगा:

"Common Resources" (Collection) 
    "Source" (Project) - everything goes here such as logging assemblies, security assemblies, etc. 
    "Version 1" (Project) - Branch as you "rev" your common assemblies so people have access to older versions. 
    "Version 2" (Project) 
    "Version 3" (Project" 
    etc. 
"Team 1" (Collection) 
    "Project 1" 
    "Project 2" 
    "Project 3" 
    "Project 4" 
    "Project 5" 
"Team 2" (Collection) 
    "Project 1" 
    "Project 2" 
    "Project 3" 
"Team 3" (Collection) 
    "Project 1" 
    "Project 2" 
etc. 

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

बस मेरे $ 0.02 मूल्य ...

+0

आप सही हैं कि आप संग्रहों में शाखा नहीं कर सकते –

+0

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

+0

मुझे आपकी टीम संग्रह पसंद है :) लेकिन क्या होता है जब टीम 1 का मानना ​​है कि इसकी प्लेट पर बहुत अधिक है और टीम 2 को प्रोजेक्ट 2 को बंद करना चाहता है? –

2

उपयोग कार्यस्थलों, वे टीम संग्रह भर में न केवल काम लेकिन सबसे संस्करण तकनीकों के साथ काम करेंगे।

4

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

यह हमें आधार फ़ोल्डर से आगे विलय का उपयोग करके क्रमिक तरीके से तृतीय पक्ष असेंबली में अपग्रेड करने के लिए एक तंत्र प्रदान करता है।

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