In Source Control Explorer, there's the "User" column. So in theory, I should be able to see other people's pending edits, right? Yet, I only see if someone locks the file. Is that server-side setting?
EDIT: ultimately, I wanna detect checkouts programmatically. But for now, UI would do. I've tried tf status
, tried the "Find by status". Neither of those shows any checkouts.
The test checkout is made by me (i. e. same user) from another machine.
EDIT2: it's TFS 2013, upgraded from initial 2012.
If you're using TFS 2012 or later, then you may well have a local workspace - it's set as the default.
Local workspaces are a nightmare, as they are invisible to the server, and allow the user to edit anything they like (this causes massive problems for any unmergeable files like binary data, solutions/projects, resource resx files, bitmaps, .doc or .xls etc.) and you can't tell if anyone else might be editing it to try to avoid these problems. They also mean you have two copies of everything on your local drive which can cause space problems. As an admin you can't do anything to administer them as they don't exist on the server. Which means you have to schlepp around everyone's PCs to manually fix things as they go wrong. All this to save users having to check out the file (which happens automatically anyway if they edit it within VS) before editing it!
To determine if this is the cause of the problem, and/or fix it:
On a client PC
In the source control window, click the Workspace drop-down at the top and choose Workspaces...
, Select and Edit
your workspace, and click the Advanced
button - this will allow access to the server/local workspace option for this workspace.
If you want to fix it, yep, you've gotta go to every PC in the building and do this to change it over.
On the server
To stop future users creating local workspaces you need to configure the server to default all new workspaces to being Server-workspaces. Note that this won't affect any existing workspaces, only the default for new ones.
On the VS menu, got to Team > Team Project Collection Settings > Source Control. On the Workspace Settings
tab of the dialog that appears, choose Local
or Server
.
Beware that if a user chooses to, they will still be able to switch their workspace to a local workspace, and the problems will begin anew. And there's nothing you can do as an admin to stop them.
"Open Visual Studio > Click File > Source Control > Find In Source Control > Status
Select "Display all checked out" or "Display files checked out to" (to filter changes by user)
Hit Find"
http://geekswithblogs.net/MikeParks/archive/2009/09/16/tfs---view-all-pending-changes-for-all-users.aspx
Another way using .net (complete source)
using(var tfsPc=new TfsTeamProjectCollection(tfsUri))
{
var vcs=tfsPc.GetService<Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer>();
var srcRoot=vcs.GetItem(srcpath);
var pendings=vcs.QueryPendingSets(new[]{srcRoot.ServerItem}, RecursionType.Full,null,null).AsEnumerable();
if(onlyLocks)
pendings=pendings.Where(pq=>pq.PendingChanges.Any(pc=>pc.IsLock));
if(minDate.HasValue)
pendings=pendings.Where(pq => pq.PendingChanges.Any( pc => pc.CreationDate > minDate.Value));
var pendingQuery=pendings
.OrderByDescending(p=>p.PendingChanges.Max(d=>d.CreationDate));
pendingQuery.Dump("pending");
}
similar to above, but join the ActiveDirectory to get a user's name