This project has moved and is read-only. For the latest updates, please go here.

TFS 2010 Source Safe Structure Clarification

Nov 2, 2010 at 11:33 PM

Hi; I am in the process of migrating from SS to TFS 2010. Some code are in SS while others are new. I have read this branching guide docs, database guide and HOL docs, TFS 2008 best practice guide on msdn, and have also read several blogs/discussions. 

I would like to thank you for writing these documents. They are extremely helpful. But, there are many inconsistencies among the documents. For example, some docs use a source folder under the main folder while others don't.

This confusion has lead me to ask you for clarification and recommendations. The hierarchy below is the source safe hierarchy I have come up with so far. I would like to know if this structure is sound. If not what changes I need to make. Or, what are my other options, pros and cons. My goal is to refine this hierarchy before I start building the structure in TFS and at the sometime help others who might be in my situation. Your help is greatly appreciated.

If this is unclear please send me an email. I will try to clarify it.

1 smvmdev01-tfs01\DefaultCollection											
2  Framework							<-- company framework classes	
3  |_SharePoint							<-- utility classes, used across team projects	
4    |_Logger								
5      |_Main							
6        |_Build						
7	 |_Docs						
8	 |_Src						
9	   |_LoggerSln					
10	     |_Src				
11	       |_LoggerProj			
12	     |_UnitTests				
13	       |_LoggerTestProj			
14	 |_Tests						
15     |_Dev							
16	 |_Dev1							<-- branch from main	
17	   |_Build					
18	   |_Docs					
19	   |_Src					
20	     |_LoggerSln				
21	       |_Src			
22		 |_LoggerProj		
23	       |_UnitTests			
24		 |_LoggerTestProj		
25	   |_Tests					
26     |_Release							
27	 |_Release1.0						<-- branch from main	
28	   |_Build					
29	   |_Docs					
30	   |_Src					
31	     |_LoggerSln				
32	       |_Src			
33		 |_LoggerProj		
34	       |_UnitTests			
35		 |_LoggerTestProj		
36	   |_Tests					
37 |_SilverLight									
38   |_SomeUtility								
39     |_Main							
40     |_Dev							
41     |_Release							
42 |_AnotherTechnology															
46 |_Databases							<-- where would reports, SSIS packages go? And how to structure those? Database projects should be updated here, so there is no reference from here to any team projects	
47   |_AdventureWorksDB								
48     |_Main							
49       |_Build						
50	 |_Src						
51	   |_AdventureWorks					<-- visual studio database solution goes here	
52	     |_Src				
53	       |_AdventureWorksProj			
54	     |_UnitTests				
55	       |_AdventureWorksTestProj			
56	     |_Tests						
57     |_Dev							
58	 |_AdventureWorksDev1 					<-- Branched from $framework\databases\adventureWorksDB\main	
59	   |_Build					
60	   |_Src					
61	     |_AdventureWorks				
62	       |_Src			
63		 |_AdventureWorksProj		
64	       |_UnitTests			
65		 |_AdventureWorksTestProj		
66	   |_Tests					
67   |_SomeOtherDB								
68     |_Main							
69     |_Dev							
70 |_Services							<-- service projects should be updated here, so there is no reference from here to any team projects	
71   |_SomeManagementServiceProj				<-- service team project	
72     |_Main							
73	 |_Build						
74	 |_Docs						
75	 |_Src						
76	   |_SomeManagementServiceSln				<-- service solution	
77	     |_Src				
78	       |_SomeManagementService				<-- Service Project	
79	       |_SomeClassLibrary				<-- class library referenced by the service project.	
80	     |_UnitTests				
81	       |_SomeManagementServiceTest			<-- Service Test Project	
82	 |_Tests						<-- What goes here?	
83     |_Dev							
84	 |_Dev1							<-- branch from $framework\services\SomeManagementServiceProj\main	
85	   |_Build					
86	   |_Docs					
87	   |_Src					
88	     |_SomeManagementServiceSln				
89	       |_Src			
90		 |_SomeManagementService		
91		 |_SomeClassLibrary		
92	       |_UnitTests			
93		 |_SomeManagementServiceTest		
94	   |_Tests						
95     |_Release							
96	 |_Release1.0						
97	   |_Build					
98	   |_Docs					
99	   |_Src					
100	     |_SomeManagementServiceSln				
101	       |_Src			
102		 |_SomeManagementService		
103		 |_SomeClassLibrary		
104	       |_UnitTests			
105		 |_SomeManagementServiceTest		
106	   |_Tests					
107  |_SomeOtherManagementServiceProj								
108    |_Main							
109    |_Dev							
110    |_Release1.0							
111    |_Release1.1							
112 |_BusinessObjects						<-- business entities used across team projects	
113   |_Main								
114   |_Dev								
115   |_Release1.0								
116 |_DL							<-- data layer common among team projects	
117   |_Main								
118   |_Dev								
119   |_Release1.0								
120 |_BL							<-- business layer common among team projects	
121   |_Main								
122   |_Dev								
123   |_Release1.0								
124 |_PL							<-- presentation layer common among team projects	
125   |_Main								
126   |_Dev								
127   |_Release1.0								
128 |_Tools							<-- utilities, helper classes created within the company	
128a  |_SomeTool								
129	|_Main							
130	|_Dev							
131	|_Release1.0							
132 ThirdPartyRefs						<-- contains 3rd party references may contain source code.	
133 |_EnterpriseLibrary						<-- 3rd party app  without source code	
134   |_4.1							<-- Ent Lib DLLs	
135   |_5.0								
136 |_Other3rdPartyRef						<-- 3rd party app  with source code	
137   |_Main								
138	|_Build							
139	|_Docs							
140	|_Src							
141	  |_Other3rdPartySln						
142	    |_Src					
143	      |_Other3rdPartyProj				
144	    |_UnitTests					
145	      |_Other3rdPartyTestProj				
146	|_Tests							
147   |_Dev								
148	|_Dev1							<-- maybe want to extend the 3rd party app	
149	  |_Build						
150	  |_Docs						
151	  |_Src						
152	    |_Other3rdPartySln					
153	      |_Src				
154		|_Other3rdPartyProj			
155	      |_UnitTests				
156		|_Other3rdPartyTestProj			
157	  |_Tests						
158   |_Release								
159	|_Release1.0							
160	  |_Build						
161	  |_Docs						
162	  |_Src						
163	    |_Other3rdPartySln					
164	      |_Src				
165		|_Other3rdPartyProj			
166	      |_UnitTests				
167		|_Other3rdPartyTestProj			
168	  |_Tests						
169 Project1										
170 |_Share							<-- contains both 3rd party references and company framework references	
171   |_EnterpriseLibrary								
172   	|_4.1							<-- file reference to $ThirdPartyRefs\EnterpriseLibrary\4.1	
173   |_Other3rdPartyRef					<-- branch from $ThirdPartyRefs\Other3rdPartyRef\Main	
174	|_Build							
175	|_Docs							
176	|_Src							
177	  |_Other3rdPartySln						
178	    |_Src					
179	      |_Other3rdPartyProj				
180	    |_UnitTests					
181	      |_Other3rdPartyTestProj				
182	|_Tests							
183   |_BusinessObjects						<-- branch from $framework\BusinessObjects\Main	
184	|_Build							
185	|_Docs							
186	|_Src							
187	  |_SomeObjSln						
188	    |_Src					
189	      |_SomeObjProj				
190	    |_UnitTests					
191	      |_SomeObjTestProj				
192	|_Tests							
193 |_Main									
194   |_Build								
195   |_Docs								
196   |_Src								
197     |_WebAppSln							
198	  |_Src						
199	    |_WebAppProj					
200	    |_ClassLibrary1					
201	  |_UnitTests						
202	    |_WebAppTestProj					
203	    |_ClassLibrary1TestProj					
204   |_Tests								
205 |_Dev									
205a  |_Dev1							<--Branch of main
206	|_Build								
207	|_Docs								
208	|_Src								
209	  |_WebAppSln							
210	    |_Src						
211	      |_WebAppProj					
212	      |_ClassLibrary1					
213	    |_UnitTests						
214	      |_WebAppTestProj					
215	      |_ClassLibrary1TestProj					
216	|_Tests								
217 |_Release
217a  |_Release1.0                                 		<--Branch of main	
218	|_Build								
219	|_Docs								
220	|_Src								
221	  |_WebAppSln							
222	    |_Src						
223	      |_WebAppProj					
224	      |_ClassLibrary1					
225	    |_UnitTests						
226	      |_WebAppTestProj					
227	      |_ClassLibrary1TestProj					
228	|_Tests								
229 Project2							<-- some sharepoint project with WCF, WF, silverlight, etc	
230 |_Main									
231 |_Dev							<--Branch of main	
232 |_Release1.0						<--Branch of main	
233 |_Release1.1						<--Branch of main	

Thanks in advance,

Hossein

Nov 5, 2010 at 10:40 PM
Edited Nov 5, 2010 at 10:42 PM

Hossein,

From what I see, it looks very good. I may not, however, understand fully your proposed branching structure. It is difficult to *visualize* Team Projects, Branches and Folders in your post.

Here is what I *think* you have:

  • Several Team Projects (in bold) such as:
    • Framework
    • ThirdPartyRefs
    • Project1
    • Project2
  • Within Each of these Team Projects you typically have a set of branches such as in Project2
    • Main
    • Dev (child of Main)
    • Release 1.0 (child of Main)
    • Release 1.1 (child of Main)
  • For common shared code you are managing this in it's own Team Project (for example ThirdPartyRefs) and branching into the TeamProjects for the dependent projects (for example Project1)
  • Underneath many of these branches you have a set of folders, for example:
    • Build
    • Docs
    • Src
  • Your VS solutions are under the Src folders
  • You seem to have a number of independent solutions in the Framework Team Project (for example Sharepoint logger, Silverlight utility) - each of these has it's own branching structure (Main, etc) within this Team Project
    • Is there a reason why all of these are in the same Team Project? I don't have a problem with doing this but an alternative might be to have each of these solutions in their own Team Project - with just a single branching structure per TP.
    • Reasons for having them in the same Team Project - they are all maintained together, and share the same development and release milestones.
  • Reasons for separating them - they are managed by separate teams and have different development and release milestones

As for you observations that there are sometimes apparent inconsistencies among the various documents in our branching guidance - thanks for the feedback. We are attempting to make these documents more internally consistent for the next release. Some of these inconsistencies may, however, be because the focus for these various documents may be different. With respect to specific observation that some examples have a source folder while others do not - it is difficult to write concise guidance and at the same time provide flexible examples for many permutations and combinations. The folder structure within your branching structure may differ from that of another team. That is the nature of the problem. We are trying to provide best practice guidance without dicatating specific folder structures, branch names, etc.

Regards,
Bill Heys
VS ALM Ranger

 

Nov 8, 2010 at 11:54 PM

Hello Bill,

Thank you for your replay. Your observation is 100% correct.

I decided to break up the Services and the Database folders into a separate Team Projects, for now. The framework, will only contain code that will be used by other team projects, and mostly helper classes.

I look forward to the next release of the guide lines.

Thanks,

Hossein