Using your other scenario as an example: if a developer added new files to p3 and checked in those files but didn't checkin the revised project file, other developers wouldn't get those files. (They might be retrieved to disk if they ran Get from the command line or Source Control Explorer, but they wouldn't be added to the solution.)
In understanding what TFS gets and doesn't get, it helps to understand how it works. The server remembers what files you have successfully gotten to your client and doesn't ever send you a file unless the version you are requesting from the server is different than the last one it sent you.
You can override this behavior by selecting "Get Specific Version" and checking "force get of file versions already in workspace". This will allow the client to make the decision about whether to get the files rather than the server.
The most common causes of running afoul of this mechanism is making local changes in the file system without corresponding changes in the version control system. For example running "del /f" on a local file that is under version control. You don't have it but the server thinks you do.
Brian
How can I run this Get Specific Version from a batch file. I have tried various combinations of /force, /overwrite, and /all. None of them work and they all tell me the file is up to date, even when the file does not exist.
I posted answer to your question in the new thread
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1031807&SiteID=1