<p>We need to regularly synchronize many dozens of binary files (project executables and DLLs) between many developers at several different locations, so that every developer has an up to date environment to build and test at. Due to nature of the project, updates must be done often and on-demand (overnight updates are not sufficient). This is not pretty, but we are stuck with it for a time.</p>

<p>We settled on using a regular version (source) control system: put everything into it as binary files, get-latest before testing and check-in updated DLL after testing.</p>

<p>It works fine, but a version control client has a lot of features which don't make sense for us and people occasionally get confused.</p>

<p>Are there any tools better suited for the task? Or may be a completely different approach?</p>

<p><strong>Update:</strong> </p>

<p>I need to clarify that it's not a tightly integrated project - more like extensible system with a heap of "plugins", including thrid-party ones. We need to make sure those modules-plugins works nicely with recent versions of each other and the core. Centralised build as was suggested was considered initially, but it's not an option.</p>

[{'answer_id': 58528, 'author': 'Shaun Austin', 'author_id': 1120, 'author_profile': 'https://Stackoverflow.com/users/1120', 'pm_score': 1, 'selected': False, 'text': "<p>You should look into continuous integration and having some kind of centralised build process. I can only imagine the kind of hell you're going through with your current approach.</p>\n\n<p>Obviously that doesn't help with the keeping your local files in sync, but I think you have bigger problems with your process.</p>\n"}, {'answer_id': 58529, 'author': 'pilif', 'author_id': 5083, 'author_profile': 'https://Stackoverflow.com/users/5083', 'pm_score': 2, 'selected': False, 'text': "<p>I'd probably take a look at rsync.</p>\n\n<p>Just create a .CMD file that contains the call to rsync with all the correct parameters and let people call that. rsync is very smart in deciding what part of files need to be transferred, so it'll be very fast even when large files are involved.</p>\n\n<p>What rsync doesn't do though is conflict resolution (or even detection), but in the scenario you described it's more like reading from a central place which is what rsync is designed to handle.</p>\n"}, {'answer_id': 58574, 'author': 'Jorge Córdoba', 'author_id': 2695, 'author_profile': 'https://Stackoverflow.com/users/2695', 'pm_score': 0, 'selected': False, 'text': '<p>Building the project should be a centralized process in order to allow for better control soon your solution will be caos in the long run. Anyway here is what I\'d do.</p>\n\n<ul>\n<li>Create the usual repositories for\nsource files, resources,\ndocumentation, etc for each project.</li>\n<li>Create a repository for resources.\nThere will be the latest binary\nversions for each project as well as\nany required resources, files, etc.\nKeep a good folder structure for\neach project so developers can\n"reference" the files directly.</li>\n<li>Create a repository for final buidls\nwhich will hold the actual stable\nrelease. This will get the stable\nfiles, done in an automatic way (if\npossible) from the checked in\nsources. This will hold the real\nproduct, the real version for\nintegration testing and so on.</li>\n</ul>\n\n<p>While far from being perfect you\'ll be able to define well established protocols. Check in your latest dll here, generate the "real" versión from latest source here.</p>\n'}, {'answer_id': 58576, 'author': 'Rob Wells', 'author_id': 2974, 'author_profile': 'https://Stackoverflow.com/users/2974', 'pm_score': 0, 'selected': False, 'text': '<p>What about embedding a \'what\' string in the executables and libraries. Then you can synchronise the desired list of versions with a manifest.</p>\n\n<p>We tend to use CVS id strings as a part of the what string.</p>\n\n<p><code>const char cvsid[] = "@(#)INETOPS_filter_ip_$Revision: 1.9 $";</code></p>\n\n<p>Entering the command</p>\n\n<p><code>what filter_ip | grep INETOPS</code></p>\n\n<p>returns</p>\n\n<p><code>INETOPS_filter_ip_$Revision: 1.9 $</code></p>\n\n<p>We do this for all deliverables so we can see if the versions in a bundle of libraries and executables match the list in a associated manifest.</p>\n\n<p>HTH.</p>\n\n<p>cheers,</p>\n\n<p>Rob</p>\n'}, {'answer_id': 69567, 'author': 'Garo Yeriazarian', 'author_id': 2655, 'author_profile': 'https://Stackoverflow.com/users/2655', 'pm_score': 0, 'selected': False, 'text': '<p><a href="http://subversion.tigris.org" rel="nofollow noreferrer">Subversion</a> handles binary files really well, is pretty fast, and scriptable.  <a href="http://www.visualsvn.com/" rel="nofollow noreferrer">VisualSVN</a> and <a href="http://www.tortoisesvn.net" rel="nofollow noreferrer">TortoiseSVN</a> make dealing with Subversion very easy too.</p>\n\n<p>You could set up a folder that\'s checked out from Subversion with all your binary files (that all developers can push and update to) then just type "svn update" at the command line, or use TortoiseSVN: right click on the folder, click "SVN Update" and it\'ll update all the files and tell you what\'s changed.</p>\n'}, {'answer_id': 69585, 'author': 'user11087', 'author_id': 11087, 'author_profile': 'https://Stackoverflow.com/users/11087', 'pm_score': 2, 'selected': False, 'text': '<p>Another option is <a href="http://www.cis.upenn.edu/~bcpierce/unison/" rel="nofollow noreferrer">unison</a></p>\n'}]
['https://Stackoverflow.com/questions/58520', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/5733/']