How to use replication in combination with version control system?


New Member
The situation is as follow :

Our company works two main production sites, communicating via WAN. We develop a software internally which uses about 100Gb of disk space on our servers (application data deployed to our customers with a lot of images). In order in improve performance, our network administrators choosed DFS replication (every 6 hours). This means that our users (people from within the company) do not have to wait (sometimes 2-3 hours) to download the needed files, because they are available locally (over LAN).

The problem is that the algorithm used by DFS replication is "Last Writer Wins". So, in case of simultaneous changes (during development/maintenance), the file with the latest date will win. I would like to avoid such data loss.

I am project manager for the overall develop process. What I want to do, is to introduce people to version control systems to tackle the simultaneous modifications problem. I plan to use Mercurial for several reasons, mainly because it is distributed, simple to explain, usable for personal use, free, and (most importantly) has great merging capabilities. However the benefits of the version control system when used locally (LAN) is lost because of the replication process (WAN) which doesn't know how to merge.

Some possible solutions are to :
  1. use only version control over the WAN (hoping that compression will be enough to speed things up)
  2. use only DFS, and track changes manually (error-prone)
  3. find a work-around with both methods
The team is small (about 10 persons). Your help and experience is appreciated.


Thành viên BQT
If it were me, I'd have a "central" repository at each location, with the developers from each site working on a different branch. One of those should probably be chosen as the "main" branch (ideally the one that will be making the most changes), although in practice it won't really matter much.

Each team's repo should be synchronized regularly (e.g., daily, on your 6 hour schedule, or even more often) with the repo from the other location, to reflect changes made in that branch. Then they would be merged to the site's branch (ideally this would be done automatically as part of the same update, but the exact details of how that merge will happen may vary, depending on your VCS of choice and your branching model).

Remember: "sync early, sync often"


New Member
Three years after I wrote this, I realise I didn't understood the problem correctly. I have to write a new custom IDE, so our developers can make the new applications pre-generated from a template. I will mark your answer accordingly. I am still not sure how to make a VCS system easy to learn for non-programers though...