views:

151

answers:

8

I'm learning mercurial as my solo scm software. With other management software, you can put change comments into the file header through tags. With hg you comment the change set, and that doesn't get into the source. I'm more used to central control like VSS.

Why should I put the file history into the header of the source file? Should I let mercurial manage the history with my changeset comments?

+11  A: 

Let the source control system handle it.

If you put change details in the header it will soon become unwieldy and overwhelm the actual code.

Additionally if the scm has the concept of changelists (where many files are grouped into a single change) then you'll be able to write the comment so that it applies to the whole change and not just the edits in the one file (if that makes sense), giving you a clearer picture of why the edit was required.

ChrisF
+3  A: 

Yes; let the source control system handle your changeset comments. The rationale for this is that it makes considerably more sense when you're viewing the change log later, trying to work out what's going on between two versions of a file - the source control system can present the change comment to try and enlighten the situation.

Rob
+3  A: 

There's no reason to manually maintain a file history when SCM software is much better suited to solve this problem. All too often I see partially-completed file histories in the source, which actually hurts, because people incorrectly assume it is accurate.

Dave Bauman
+2  A: 

I'm not a big proponent of littering the code with change comments. In the event they are needed they can be looked up in the SCM (at least for the SCM variants I have used). If you do want them in the file, consider putting them at the end instead of the beginning. That way you won't have to scroll down past the (uninteresting, to me at least) comments before you get to the actual code.

tvanfosson
A: 

I have experience with this. I've had the file history in the comments, it was awful. Nothing but garbage, sometimes you would have to scroll down almost 1k lines of code changes before you finally got to what you wanted. Not to mention, you're slowing down other aspects of your build process by adding more kb to your source code tree.

altCognito
If you can manage to write a changelog so bit that it slows down the build process, then you have a very slow parser for your language? It should not take many miliseconds to skip through the comment with the file history :-)
Martin Geisler
Milliseconds add up, and it's not just the parsing but pulling it off disk etc...
altCognito
+1  A: 

Much easier to forget to maintain history in the source, as one always (imo) should comment commits to source control system that problem dissappers. Also if changing lots of files before commit, changing history in every file will be annoying work. This is really one of the points with having scm.

Joakim Elofsson
You should be able to configure your SCM to insist on comments too
ChrisF
+1  A: 

Another vote for letting the SCM system handle the checkin comments, but I do have one thing to add.

Some systems allow you to use RCS tags in your source code where the SCM can insert the change history directly into the source file being committed automatically. Sounds like a nice balance because the history is then in the SCM system and then automatically put into the source code itself.

The problem is that this process changes the source file. I think that's a bad idea because the file cannot be changed on disk until after you comment is inserted. If you were a good engineer, you should have built and tested changes before the commit. If your source changes after the commit, then you've essentially got a build that could be broken - but most engineers won't build after a commit - why should they?

But it's just a comment you say! True, but I did have a case where there was code in my source file that strangely enough had reason to look like an RCS header tag and that section of the code got replaced on checkin, thereby munging my code. Easy enough to fix, but bad that a build got broken for 20+ users

Mark
+1  A: 

The difference is not whether it's a centralized or distributed VCS, it's more about what's being changed.

When I moved to .Net, the number of files updated for any individual change seemed to skyrocket. If I had to log the change in each file, I'd never get any real work done. By commenting on the set of changes, it doesn't matter how many files I had to update.

If I ever needed to identify all of the changes for a particular change, I can diff between the two versions of the project.

The biggest difference (and advantage) I saw when switching away from SourceSafe was the switch from file based to project based commits. As soon as I got used to that, I stopped adding change-log type comments to all of my files.

(As a side effect, I've found that my process description comments have gotten better)

Brad Bruce