I currently use SVN for a number of things that aren’t exactly code, for instance xml files, report templates, miscellaneous files, etc. I have several non-developers who are comfortable using TortoiseSVN for this. They typically work as follows:
-
Person A – does an SVN Update on the folder of interest to them. Or perhaps just on a single file.
-
Person A – edits whichever file(s) they’re working on. Perhaps add or remove files.
-
Person B – someone else is probably working on different files at this point
-
Person A – does an SVN Commit to save their changes to the repository.
Very occasionally they’ll hit conflicts where more than one person has edited a file. Almost always this is just because they forgot step #1. Because they’re always working on separate files, there are (almost) never real conflicts. As long as they do step #1 first everything works fine.
I’d like to move to Mercurial, however something holding me back is the prospect of having do ‘merge’ all the time, because Mercurial looks at the state of the entire repository, not just the files of interest at a particular time. e.g. the workflow would be like this:
-
Person A – does a pull and update on the repository. (let’s assume there are no local changes so this is straightforward).
-
Person A – edits whichever file(s) they’re working on. Perhaps add or remove files.
-
Person B – someone else edits, commits, and pushes a different file at this point
-
Person A – commits changes. Tries to push. Gets an error about multiple heads.
-
Person A – does a pull and update. update doesn’t work: merge required.
-
Person A – does a merge. If using TortoiseHg it’s a bit confusing working out what to click on to do the merge. I guess this is simpler on the command line, provided there are no complications.
-
Person A – commits the merge.
-
Person A – pushes the changes.
My resistance is that there are more steps, and the merge step is somewhat hard to get your head around if you’re not a developer. Is there a way I can put these steps together to make the process nice and simple?
“Very occasionally they’ll hit conflicts where more than one person has edited a file. Almost always this is just because they forgot step #1. Because they’re always working on separate files, there are (almost) never real conflicts. As long as they do step #1 first everything works fine.”
If this is the case why do you want to use a DVCS? Mercurial is great, but the benefits of a DVCS come from the ability to merge and fork and the ease of doing either, if your workflow requires neither why would you want to switch toolset?