I am attempting to understand how TFS 2008 (and 2010 if it's different) store and communicate details of a set of changes in a changeset.
Now when I commit to a Subversion hosted project, the client sends diffs to the server. So if I have added a file and changed a few lines in another it sends something like "Added file A.txt, put 2 lines "A" "B" into B.txt" . This means I can back out a revision as diffs are nicely reversible - "Delete file A.txt and take out two lines from B.txt". Pretty sure it is the same with git too.
I have a feeling that TFS does not store changesets in this way (based on rumour and the fact that I cannot easily roll back revisions etc.).
What I believe occurs is this: If I changed files A, B and C within a changeset, what is actually stored in the changeset is a whole new copy of files A, B, C. Not just the diffs.
Am I correct in this assumption? As commercial software, I could well believe this information is not available but I thought I would ask as googling produced nothing!
As a corollary: Where are TFS changesets stored? I know that SQL server is used for some storage... changsets too?
We are currently using TFS 2008 but it would also be useful to know the answer for 2010 as I think there are plans to upgrade.