Avoiding nested branches caused by a source code dependency hierarchy

We are using TFS 2010, and we have some very nasty problems with our dependency / branch management.

At first glance, our problem is quite common. We have AppServer , WebClient and WinClient . Both WebClient and WinClient are dependent on AppServer . There are two additional restrictions:

  • we prefer to include a specific version of the dependency used
  • we prefer to include the source code rather than the binaries, because it’s easier to implement and test changes to AppServer that come from a specific origin, such as WinClient .

We select the following folder structure:

 \ |-AppServer (1) |-WebClient |-Dependencies |-AppServer (2) |-Sources |-WinClient |-Dependencies |-AppServer (3) |-Sources 

AppServer (2) and (3) are branches (like the first class branch) of AppServer (1) . All this works very well and corresponds to our development scenario.

Now comes the problem. Suppose we want to implement the "branch-per-release" template on a WebClient , which means branching the whole WebClient hierarchy to another location. We cannot do this because TFS2010 does not allow nested branches of the first class.

To add to this call, we present a branch hierarchy (only for WebClient and we have several other dependent and dependent projects):

 WebClient |-Client1 | |-feature-1 | |-feature-2 | |-v1 Release | | |-v1 hotfix1 | | |-v1 hotfix2 | |-v2 Release | |-v1 hotfix1 | |-v1 hotfix2 | |-Client2 |-feature-1 |-feature-2 |-v1 Release | |-v1 hotfix1 | |-v1 hotfix2 |-v2 Release |-v1 hotfix1 |-v1 hotfix2 

What are our options? I can think of several:

  • Convert first class branches to folders. This will allow us to embed branches, but we will lose tracking and visualization, which I don't like.
  • We can somehow rebuild our code regarding dependencies. But I tried to think about it for some time and still do not see the answer.
  • We can switch from code dependencies to binary dependencies, but this will slow down our development.

Is there any solution I missed?

+4
source share
1 answer

A couple of thoughts:

1) You can leave your AppServer branches separate and not nested from your WebClients and simply use the Mapping Workspace functionality in TFS to emulate something like what you defined through the AppServer branch in the client branches. This will allow the developer to select the desired AppServer branch and attach it to the local file structure in the right place to facilitate their work.

2) Your statement that development has slowed down due to the availability of binary files is similar to what I will investigate further and try to measure and quantify. If you have a clear gap between your AppServer and Clients, I would not expect any dependencies between them, but instead a proxy code that can be generated by svcutil or some other tool. If so, and you host AppServer in some process and exchange data with clients in another, I don’t understand why you need to implement your original structure. This seems to be an unnecessary connection, and I would like to know why this is done in more detail.

+1
source

All Articles