<p>I'm looking for something that can copy (preferably only changed) files from a development machine to a   staging machine and finally to a set of production machines.</p>

<p>A "what if" mode would be nice as would the capability to "rollback" the last deployment.   Database migrations aren't a necessary feature.</p>

<p>UPDATE: A free/low-cost tool would be great, but cost isn't the only concern.  A tool that could actually manage deployment from one environment to the next (dev->staging->production instead of from a development machine to each environment) would also be ideal.</p>

<p>The other big nice-to-have is the ability to only copy changed files - some of our older sites contain hundreds of .asp files.</p>

[{'answer_id': 42811, 'author': 'lomaxx', 'author_id': 493, 'author_profile': 'https://Stackoverflow.com/users/493', 'pm_score': 0, 'selected': False, 'text': '<p>We used <a href="http://www.eworldui.net/unleashit/" rel="nofollow noreferrer">UnleashIt</a> (unfortunate name I know) which was nicely customizable and allowed you to save profiles for deploying to different servers. It also has a "backup" feature which will backup your production files before deployment so rollback should be pretty easy.</p>\n'}, {'answer_id': 42839, 'author': 'Guy Starbuck', 'author_id': 2194, 'author_profile': 'https://Stackoverflow.com/users/2194', 'pm_score': 1, 'selected': False, 'text': "<p>You don't specify if you are using Visual Studio .NET, but there are a few built-in tools in Visual Studio 2005 and 2008:</p>\n\n<p>Copy Website tool -- basically a visual synchronization tool, it highlights files and lets you copy from one to the other.  Manual, built into Visual Studio.</p>\n\n<p>aspnet_compiler.exe -- lets you precompile websites.</p>\n\n<p>Of course you can create a web deployment package and deploy as an MSI as well.</p>\n\n<p>I have used a combination of Cruise Control.NET, nant and MSBuild to compile, and swap out configuration files for specific environments and copy the files to a build output directory.  Then we had another nant script to do the file copying (and run database scripts if necessary).</p>\n\n<p>For a rollback, we would save all prior deployments, so theoretically rolling back just involved redeploying the last working build (and restoring the database).</p>\n"}, {'answer_id': 43186, 'author': 'DrFloyd5', 'author_id': 1736623, 'author_profile': 'https://Stackoverflow.com/users/1736623', 'pm_score': 2, 'selected': False, 'text': '<p><strong>@Sean Carpenter</strong> can you tell us a little more about your environment? Should the solution be free? simple?</p>\n\n<p>I find robocopy to be pretty slick for this sort of thing. Wrap in up in a batch file and you are good to go. It\'s a glorified xcopy, but deploying my website isn\'t really hard. Just copy out the files.</p>\n\n<p>As far as rollbacks... You are using source control right? Just pull the old source out of there. Or, in your batch file, ALSO copy the deployment to another folder called website yyyy.mm.dd so you have a lovely folder ready to go in an emergency.</p>\n\n<p>look at the for command for details on how to get the parts of the date.</p>\n\n<pre><code>robocopy.exe\nfor /?\n</code></pre>\n\n<p>Yeah, it\'s a total "hack" but it moves the files nicely.</p>\n'}, {'answer_id': 107831, 'author': 'splattne', 'author_id': 6461, 'author_profile': 'https://Stackoverflow.com/users/6461', 'pm_score': 2, 'selected': False, 'text': '<p>For some scenarios I used a <strong>freeware</strong> product called <strong>SyncBack</strong> (<a href="http://www.2brightsparks.com/downloads.html#freeware" rel="nofollow noreferrer">Download here</a>).</p>\n\n<p>It provides complex, multi-step file synchronization (filesystem or FTP etc., compression etc.). The program has a nice graphical user interface. You can define profiles and group/execute them together.</p>\n\n<p>You can set filter on file types, names etc. and execute commands/programs after the job execution. There is also a job log provided as html report, which can be sent as email to you if you schedule the job.</p>\n\n<p>There is also a professional version of the software, but for common tasks the freeware should do fine.</p>\n\n<p><img src="https://www.2brightsparks.com/assets/images/syncback/sb-main.jpg" alt="alt text"></p>\n'}, {'answer_id': 380222, 'author': 'Simon_Weaver', 'author_id': 16940, 'author_profile': 'https://Stackoverflow.com/users/16940', 'pm_score': 0, 'selected': False, 'text': "<p>I've given up trying to find a good free product that works.\nI then found Microsoft's Sync Toy 2.0 which while lacking in options works well.</p>\n\n<p>BUT I need to deploy to a remote server.</p>\n\n<p>Since I connect with terminal services I realized I can select my local hard drive when I connect and then in explorer on the remote server i can open <code>\\\\tsclient\\S\\MyWebsite</code> on the remote server.</p>\n\n<p>I then use synctoy with that path and synchronize it with my server. Seems to work pretty well and fast so far...</p>\n"}, {'answer_id': 1950857, 'author': 'projectshave', 'author_id': 124800, 'author_profile': 'https://Stackoverflow.com/users/124800', 'pm_score': 0, 'selected': False, 'text': '<p>Maybe rsync plus some custom scripts will do the trick. </p>\n'}, {'answer_id': 2014683, 'author': 'januszstabik', 'author_id': 113911, 'author_profile': 'https://Stackoverflow.com/users/113911', 'pm_score': 0, 'selected': False, 'text': "<p>Try repliweb.  It handles full rollback to previous versions of files.  I've used it whilst working for a client who demanded its use and I;ve become a big fan of it, partiularily:</p>\n\n<ul>\n<li>Rollback to previous versions of code</li>\n<li>Authentication and rules for different user roles</li>\n<li>Deploy to multiple environments</li>\n<li>Full reporting to the user via email / logs statiing what has changed, what the current version is etc.</li>\n</ul>\n"}]
['https://Stackoverflow.com/questions/42797', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/729/']