(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Source control is the backup of your code, as well as your tool for tracking changes over time.
With source control, we can share project code and collaborate with other team members. Using it allows us to track changes, compare code, and even roll-back if required. Moreover, it keeps our code safe and that is the most important part.
It also helps you to do root cause analysis by finding out who made the change. Then, you can chat with them and get aligned on what caused the problem and what is the best solution moving forward. Remember, the person who made the change might have important knowledge that you don't know!
Don't just fix the problem, see who caused the problem and correct them.
- Adam Cogan
Using VS Code? There are 2 awesome extensions to see history:
Figure: Right-click a file and select Git | View History to see the changes in source control.Figure: We can select different changesets and compare the changesFigure: We can select different changesets and compare the changes. Blue = modified, Green = addition, Red = deletionFigure: Right click a file and select Git | Blame (Annotate) to view the history on a segment basisFigure: Use annotate to understand (or find the guy) to understand his thoughts before deleting/changing someone elses codeFigure: Annotation is great, but it gets even better when clicking the commit code gives you its full details
Source control is the backup of your code, as well as your tool for tracking changes over time.
With source control, we can share project code and collaborate with other team members. Using it allows us to track changes, compare code, and even roll-back if required. Moreover, it keeps our code safe and that is the most important part.
You should not just trigger a build and walk away however – make sure that build succeeded!
The first way is from within Visual Studio.
Figure: Good Example – Check your build has passed from Team Explorer | Builds
The second is by always having the TFS Build Notification tool always running. Through it you can subscribe to any builds you are interested in, when they start, end and their status.
Figure: Better Example – Check your build(s) are continually passing by having the TFS Build Notification tool always running - Start | All Programs | Visual Studio 2012 | Team Foundation Server Tools | Build Notifications
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Gated Checkins are great for verifying your project builds successfully before a checkin occurs, but the workflow and dialog messages can be difficult to follow. Sometimes it’s not clear what you need to do next as a developer.
The process for a project with a Gated Checkin build is:
The developer clicks Check In
Changes are not checked in, but are shelved and a build is queued
The developer is notified when a build succeeds and prompted to “Reconcile” their workspace
Note: This relies on the Build Notifications tool running, which may not be the case. If it’s not running, the developer has to manually reconcile their workspace before they can effectively continue working.
Figure: The developer is notified if a gated check-in resulted in a commit
If you don't have the Build Notifications tool running or you click Ignore, you will have to manually reconcile. There are a few ways to do this.
You can click Check In again. This will fail, but any files you’re trying to check in will be reconciled as a result. You should definitely not do this if you’ve made additional changes since checking in.
Figure: Bad Example - Reconcile by clicking "Check In" again. This will fail, but any files you're trying to check in will be reconciled.
Alternatively, you can open the queued build and choose Actions | Reconcile Workspace... to fix your workspace
Figure: OK Example – Open the Build and choose Actions | Reconcile Workspace...
The best way is to click the link in the notification to open a specific build window with a Reconcile Workspace link included.
Note: This notification will disappear if you close it or navigate away from the Pending Changes window in Team Explorer.
Figure: Good Example #1 – Click the link in the notification after clicking Check In
Figure: Good Example #2 – Click on the link in the notification to open the build, then click Reconcile Workspace when the build finishes
Gated Checkins are great for verifying your project builds successfully before a checkin occurs, but the workflow and dialog messages can be difficult to follow. Sometimes it’s not clear what you need to do next as a developer.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Check-in policies are a great way to enforce code quality before it hits your source control repository. SSW recommends that the following check-in policies be enabled by default on your project:
Changeset Comments Policy - To enforce that all check-in contain comments
SSW Code Auditor - To enforce coding standards and best practices before check-in
Work Items – To ensure check-ins are linked to a Work Item in TFS
To enable these policies:
Click Settings in the Team Explorer Home hub
Click Source Control in the Team Project section (not Team Project Collection)
Open the Check-in Policy tab
Click Add... and select the check-in policies above. If you don’t have SSW Code Auditor installed, download it here.add
Figure: Choose check-in policies in TFS
Check-in policies are a great way to enforce code quality before it hits your source control repository. SSW recommends that the following check-in policies be enabled by default on your project:
Changeset Comments Policy - To enforce that all check-in contain comments
SSW Code Auditor - To enforce coding standards and best practices before check-in
Work Items – To ensure check-ins are linked to a Work Item in TFS
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Too many people treat Source Control as a networked drive. Don't just check-in when the clock ticks past 5 or 6 o'clock. If code doesn't pass its unit tests or won't even compile put your code in a shelveset.
Figure: Put your dishes straight in the dishwasher otherwise you leave a mess for others (aka "Check-in" the right way otherwise you give other developers problems)
Other recommendations have included using "//TODO" or commenting the code out. However, we recommend avoiding this practice as it increases the risk that the code is forgotten about.
Note: Having gated check-ins will help prevent this from happening.
Note: A useful tool is TFS Auto Shelve - Protect your code by guaranteeing your pending changes are always backed up to the TFS server.
Too many people treat Source Control as a networked drive. Don't just check-in when the clock ticks past 5 or 6 o'clock. If code doesn't pass its unit tests or won't even compile put your code in a shelveset.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Never allow a situation where a developer can check outcode and the code does not compile – or the unit tests are not all green. This is called “breaking the build” and the punishment in our office is 20 push-ups and fixing broken links for an hour!
Check out
Compile
Develop
Compile
Check-In
Figure: Bad example - wrong process
Figure: Before you start cooking prepare all your ingredients. Before you start coding, "Get Latest" the right way
Get latest
Compile
Run Unit Tests
If Tests pass then start developing
Check out
Develop
Compile
Run Unit Tests
Get Latest (Always do a Get Latest before checking in as code you didn't change could break your code)
Compile
Run Unit Tests
Check-In if all tests passed
Wait for gated check-in (GC) to complete
Reconcile your workspace if it was successful
Check that Continuous Integration (CI) build was successful(If GC was skipped)
Figure: Good example - right process****
Note: You should have both a Gated-Check-in (GC) and a Continuous Integration (CI) build on every branch.
Never allow a situation where a developer can check outcode and the code does not compile – or the unit tests are not all green. This is called “breaking the build” and the punishment in our office is 20 push-ups and fixing broken links for an hour!
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Team Foundation Server is great, and one of its neat features is enforcing comments when checking in code. Without comments, some of the other built in features like History become redundant without comments.
Figure: Bad Example: No Comments against the check-ins we don’t know what changes were made in each revision
Figure: Good Example: Now we can pin point which revision a particular change has been made
In Visual Studio 2013, to enforce this behaviour, you will need to:
Figure: Go to Team Explorer | Source ControlFigure: Then Check-in Policy | AddFigure: Then select Changeset Comments Policy and OKFigure: Now you have the Changeset Comments Policy applied to your Team Project
Now the next time someone checks-in some code, they are forced to enter a comment.
Team Foundation Server is great, and one of its neat features is enforcing comments when checking in code. Without comments, some of the other built in features like History become redundant without comments.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
You can spend valuable developer time on every part of a project. The bulk of time is normally spent on coding up .cs, .vb, .resx and .aspx files. However, you could potentially have the following happen if you do not include other files in source control:* lose work
lose old versions of work
have work overwritten
In particular, you should make it as easy as possible to see who changed what and who deleted what and allow a simple rollback to previous versions of non-code files. Files you should put in source control include:* XSL files
Word documents
Excel Spreadsheets
Visio Diagrams
HTML files
Image files, Flash animations and psd files (yes this takes room in your source control database - but we still want to be able to revert to an old version easily)
Things you don't store are:* Video files eg. avi
Installers eg. .msi
You can spend valuable developer time on every part of a project. The bulk of time is normally spent on coding up .cs, .vb, .resx and .aspx files. However, you could potentially have the following happen if you do not include other files in source control:* lose work
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
If you have Team System Web Access installed and you need to access it from wherever you are, you can configure a port to be forwarded to the server where Team System Web Access is installed, eg: tfs.your-domain.com:8090.
Visual Studio Team System Web Access Power Tool Figure: Visual Studio Team System Web Access Power Tool
If you have Team System Web Access installed and you need to access it from wherever you are, you can configure a port to be forwarded to the server where Team System Web Access is installed, eg: tfs.your-domain.com:8090.
A domain name or IP address forwarded to TFS (eg: tfs.your-domain.com)
Port 8080 (this is port that TFS uses for source control)
Firewall/Router rule (ideally)
Tip: You can solve this with TFS Extranet Support:
Yes Port 8080 will work in most cases but not on the strictest networks, where only Port 80 is allowed.
Then you have to use port forwarding via a firewall/router rule (recommended) to forward port 80 to the TFS port, while in this way, you would lose the TFS SharePoint Portal and Reporting Services.
Rule to forward port 80 to the TFS port Figure: Rule to forward port 80 to the TFS port
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
One of the big advantage of using TFS is end to end traceability, however this requires the developer to do one extra step to link their code (changeset) with requirements (work items). Code is the body of software, while user requirement is the spirit. Work Item association feature helps us to link the spirit and body of software together. This is especially useful when you trying to identify the impact of a bug in term of user requirements.
Figure: Bad Example: No work item is associated with changeset
Figure: Good Example: No work item is associated with changeset
More Information
In order to achieve this, developers need to choose the Work Item tab when check-in and "associate" code with a related work item.
Figure: Associate Work Item with Changeset
As the project administrator, you can take one step further to enable "Work Item Check-in Policy" to enforce this rule in your team.
Figure: Always enable the “Work Items check-in policy”
One of the big advantage of using TFS is end to end traceability, however this requires the developer to do one extra step to link their code (changeset) with requirements (work items). Code is the body of software, while user requirement is the spirit. Work Item association feature helps us to link the spirit and body of software together. This is especially useful when you trying to identify the impact of a bug in term of user requirements.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
The best way of getting the most out of DevOps is to have a "DevOps Master". A DevOps Master is like a Scrum Master but is only interested in helping you get 100% from DevOps and it's perfectly fine for them to be part of the development team.
It's important to note that a DevOps Master is not a management position. It's simply a role that encourages the team to use DevOps in the best way possible. With a specialist knowledge of DevOps, they're in the best position to know what should change and what could be done better.
Some of the things they should focus on are:
Taking you beyond DevOps as just a source control system
Using DevOps to help you on a proper ALM road
Making sure that automated builds are created and managed properly by the developers
Managing the build servers if additional help is needed (builds themselves are the responsibility of the developers)
Checking the builds are fit for purpose, and that unit tests are included
Checking that deployment is working properly
Checking the right check-in policies are enabled and developers are leaving meaningful check-in or commit messages
Ensuring code analysis is enabled and getting stronger
Ensuring CodeAuditor is running
Cleaning up unused Workspaces (this removes old check-outs by default)
Making sure all patches are applied to the servers (they might not do the work, but they make sure it's being done)
These duties need to be taken care of on a regular basis, but most of all, the all members of the team should be encouraged to improve things themselves.
The best way of getting the most out of DevOps is to have a "DevOps Master". A DevOps Master is like a Scrum Master but is only interested in helping you get 100% from DevOps and it's perfectly fine for them to be part of the development team.
It's important to note that a DevOps Master is not a management position. It's simply a role that encourages the team to use DevOps in the best way possible. With a specialist knowledge of DevOps, they're in the best position to know what should change and what could be done better.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
This field should not be null (Remove me when you edit this field).
Figure: Include your original artworks in Source (eg .PSDs in Source Control)
We chose to exempt uncompressed video files as they tend to have large footprints and potentially cause delays in productivity. It is highly recommended that you have a separate backup procedure for these files.
This field should not be null (Remove me when you edit this field).
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Whenever we setup a new Team Project we implement a basic version control structure. We put "readme.txt" files in the folder structure explaining the different levels, and a solution file called [Client].[Product].sln?located at ?/[Client]/[Product]/DEV/ within version control.
Figure: Bad Example, how would anyone know how to sort this mess out?
Whenever we setup a new Team Project we implement a basic version control structure. We put "readme.txt" files in the folder structure explaining the different levels, and a solution file called [Client].[Product].sln?located at ?/[Client]/[Product]/DEV/ within version control.
Figure: Bad Example, how would anyone know how to sort this mess out?
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
This field should not be null (Remove me when you edit this field).
There are two ways to do this:1. If you haven’t checked in any files since you started modifying them then the process is simple:* Right click your solution and Undo Pending Changes
If you aren’t so lucky and have made some commits along the way then the only option is to use the Rollback command.
Find the revision before you started checking code in using the History command
Figure: The last revision before Tristan made changes was 5367
Open the Command Prompt in your current working directory and type “c:\Program Files\Microsoft Team Foundation Server Power Tools\tfpt.exe” rollback /changeset:5367
Click Yes and the rollback will proceed
It would be nice if there was a GUI for this tool so that I can just right click and select rollback. See Better Software Suggestion – TFS
This field should not be null (Remove me when you edit this field).
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Git has become the defacto standard for version control systems. It's distributed and decentralized and promotes working disconnected as default. It also takes away the pain of branching and merging and has a built in code review system with pull requests. Everybody should be using Git, and if you're not, you should be migrating the Git using one of the below tools.
VisualStudio.com - Import Repository
Git-Tf
Git-Tfs (recommended)
VisualStudio.com - Import Repository
VisualStudio.com gives you the ability to import from a TFVC repository into a new Git repository.
Bad Example - Built in tool has several limitations
If you don't care about source control history, then this inbuilt tool is the easiest to use. It has the limitations of:
180 days of history
No branches
TIP - Use this if you don't care about source control history
Git -Tf
Git-Tf is an open source command line tool that works cross platform and use the Java TFS SDK. This tool is useful for migration if you're not on a Windows environment. This tool is not maintained and has issues with migrating branches.
TIP - Use Git-Tf if you don't have a Windows environment
Git-Tfs ( Recommended)
Git-Tfs is an open source command line tool that uses the .NET TFS SDK to interface between Git and TFVC. It has the following advantages over the other tools:
Git has become the defacto standard for version control systems. It's distributed and decentralized and promotes working disconnected as default. It also takes away the pain of branching and merging and has a built in code review system with pull requests. Everybody should be using Git, and if you're not, you should be migrating the Git using one of the below tools.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
SSW uses and recommends Microsoft Team Foundation Server (TFS) as a source code solution.
Figure: Microsoft Visual Studio Team System
Here are some of the reasons why:
Checkin policies
Integrated Work Items and Source control
Visual Studio IDE integration
Code Metrics
HTTP access via webservices
Integrated Build Server
Reasons companies choose Visual SourceSafe (VSS)
No server required
No VPN required
They are ignorant about the potential corruption problems
Figure: Bad Example, Visual SourceSafe (VSS) is a bad choice
Reasons companies choose Subversion (SVN)
-It's free
-It's easy to use
-No Build integration
-No Work Item integration
**Figure: Better example, Subversion (SVN) is an OK choice**
**Figure: Better example, Subversion (SVN) is an OK choice
**
Reasons companies choose Team Foundation Server (TFS)
-It's free (With MSDN)
-It's easy to use
-It's easy to install
-High fidelity SQL data store
-No VPN required
-Does not require a server (basic configuration)
-Has Build integration
-Has Work Item integration
-Has Test suite integration
-Has reporting out of the box
Figure: Better example, Subversion (SVN) is an OK choice
SSW uses and recommends Microsoft Team Foundation Server (TFS) as a source code solution.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Every Workspace that exists on the server is another set of code that TFS has to check for checkouts. Worse you may have files checked out in that workspace that you will never see.
The current workspace status
Figure: John has not accessed many of these workspaces in years! Are they still current?
Use the Workspace Sidekick in Team Foundation Sidekicks at the end of every month to make sure you have not forgotten anything.
Every Workspace that exists on the server is another set of code that TFS has to check for checkouts. Worse you may have files checked out in that workspace that you will never see.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
The more workspaces you have the more load the TFS server is under when users check in and out. TFS has to check all of the workspaces for other checkouts of the same files which can be intensive if you have a lot of workspaces.
If a developer had code checked out to a workspace that they have not even looked at in months, what is the likelihood that they even remember what changes they were making?
Why do workspaces build up?* Developers use multiple computers
Developers use volatile virtual computers
Developers reinstall their workstation
Developers get new workstations
Developers leave
Developer checklist:* Check workspaces often to see what you don't need
Delete any workspaces you no longer need
TFS Master Checklist:* Delete all workspaces that have not been edited in 6 months
Warn developers for workspaces that have not been accessed in 3 months
Longtime Workspaces Figure: Bad example - Rebecca has a workspace that has not been accessed in a while Current WorkspacesFigure: Good example - All of Julian's workspaces are current
Open VS 2010, File | Source Control | WorkSpaces, click the "Show remote workspaces":
Figure: Manage Workspaces
Keep press "Ctrl", select the workspaces which haven't been used for a long time.
Click "Remove" button.
The more workspaces you have the more load the TFS server is under when users check in and out. TFS has to check all of the workspaces for other checkouts of the same files which can be intensive if you have a lot of workspaces.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
When working on a task spanning multiple files, do not check-in only one or two of the files, this leads to the problem of partial check-ins where references to new classes or methods are unavailable because they are in the files that haven't been checked in. So either, check-in all the files you are working on or none at all if you aren't finished working on the task.
Make Visual Studio remind you to check code in
In Microsoft Visual Studio. NET sharing project code can be configured by ticking the two checkboxes on top, in Options (from the Tools menu) as shows below.
Figure: Check-in files automatically the 2nd checkbox is very important so you get reminded to check-in your project when closing VS.NET. You know how frustrating it is when you want to fix an application and all the files are checked out by some one else!
**What about VB6 applications ?**
In Visual Basic 6 this is done by going through Tools -> Source Safe -> Options and setting it as shown in the diagram below.
Figure: You can also check-in automatically in VB6
**What about Access applications ?**
We also use VSS for Access projects. Access 2000 had problems with MDBs (not ADPs) but Access 2003 works fine with both. The only thing you have to be careful of is that if a form is not checked out, it still lets you modify the form, but when you close the form, it rolls back to the VSS version and you lose all of your changes.
Figure: You can also check-in automatically in Access
Figure: All the basic functions are easily accessible.
Note: Using VSS in Microsoft Access has a few limitations, most significant of which is the inability to reattach to VSS projects. Once you have detached from a VSS project, you will need to create a new VSS project in order to place the Access application back into VSS.
What about SQL Server Databases?
We save the scripts of every SQL Server schema change in Source Control.
When working on a task spanning multiple files, do not check-in only one or two of the files, this leads to the problem of partial check-ins where references to new classes or methods are unavailable because they are in the files that haven't been checked in. So either, check-in all the files you are working on or none at all if you aren't finished working on the task.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
It is important to regularly do a "Get Latest" to make sure you are using the most recent version of the code. In a team, if you go too long without doing a Get, you are more likely to encounter inconsistencies and will have to spend time merging your code.
As part of your team process, you should make sure all developers are doing a Get Latest on a regular basis for each project they are working on. This is in line with Do you Follow a Test Drive Process? rule.
Tip: To find out when you or another developer last did a Get from TFS, you can use the Workspace Sidekick in Team Foundation Sidekicks. If you're the TFS Master, you should do this every couple of weeks to make sure your team is regularly retrieving files from TFS.
Figure: This report shows the last time each user did a Get from TFS
It is important to regularly do a "Get Latest" to make sure you are using the most recent version of the code. In a team, if you go too long without doing a Get, you are more likely to encounter inconsistencies and will have to spend time merging your code.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
After you use the right tool to migrate from TFVC to Git, there's a few more things you need to do to clean things up for a new user joining the project. By default, if there is a TFVC repository, that will become the default in the UI.
Unfortunately, you can't kill the TFVC repository and make Git the default one, so there's a few steps you need to follow.
Figure: Bad Example - Can't delete the now deprecated TFVC repository
Delete files from TFVC
Go into the repository, delete any existing files. Add a new document saying "_Migrated_to_Git.md". This will stop people from getting the wrong code.
**Figure: Clean up TFVC so developers can't accidentally get the wrong source code
**Note : All the source code is still there, it's just flagged as being deleted.
Lock down TFVC
In the TFVC repository, click Security
Figure: Configure the security of the TFVC repository
**
Then deny check-ins to **Contributors , P roject Administrators and Project Collection Administrators . This should stop anyone from committing new code to the repository.
Update the Dashboard
Next step is to update the dashboard to let new developers know.
Figure: Good example - Let new users know that the source control is now on Git
Suggestions for the VSTS team
Give us the ability to hide a repository
Give us the ability to set a repository as the default for all users
Give us the ability to delete a TFVC repository
Having any of these suggestions will avoid the confusion on this screen
Figure: Bad Exmaple - This is confusing for a new dev
After you use the right tool to migrate from TFVC to Git, there's a few more things you need to do to clean things up for a new user joining the project. By default, if there is a TFVC repository, that will become the default in the UI.
Unfortunately, you can't kill the TFVC repository and make Git the default one, so there's a few steps you need to follow.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Normally, you don't need to check the history very often. If you do need sometimes, then get it from VSS.
Save much space for TFS. For example, we have a about 7G VSS history database, and we may only need a small bit of them every 3 months, so what's the point of coping about 7G file when we only need one line of code?
But there are also some considerations that you may want to migrate the history:
If the history of source changes will be checked very often, so you can check the old history with the recent together via TFS.
You are going to decommission the old VSS completely. Say you don't want to keep the old VSS database, and then it will be necessary to keep the information somewhere.
If the project is very active, then it will be worthy to migrate the history because your developers may need them every day.
If you are going to move the history, the links may help:
Normally, you don't need to check the history very often. If you do need sometimes, then get it from VSS.
Save much space for TFS. For example, we have a about 7G VSS history database, and we may only need a small bit of them every 3 months, so what's the point of coping about 7G file when we only need one line of code?
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
In conjunction with regular check-ins, files in source control should never be locked unless absolutely necessary. Use either 'Unchanged - Keep any existing lock' - or 'None - Allow shared checkout'.
Only use 'Check Out - Prevent other users from checking out and checking in' when checking out binary files e.g. Word documents or third party compiled dll’s. (This will be the default this will be the selected option due to the inability for binary files to be merged on check in.)
Check-out settings for files Figure: Correct checkout settings at the file level - don't lock files
Do not enforce single check-out at the project level - make sure the 'Enable multiple check-out' option is ticked under Team Project Settings, Source Control.
check-out settings for team project Figure: Correct check-out settings at the team project level - enable multiple check-out's.
In conjunction with regular check-ins, files in source control should never be locked unless absolutely necessary. Use either 'Unchanged - Keep any existing lock' - or 'None - Allow shared checkout'.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Install the TFS Power Tools
When you install this, make sure you do a 'Custom Install', and select the 'Shell Integration' option (this is off by default)
Use Windows Explorer Figure: Using Windows Explorer for your source control is a dream (great for designers too - who don't want to use VS.NET)
Suggestion to the TFS Team: I didn't see blame annotate in the drop down - which is a bit odd.
When you install this, make sure you do a 'Custom Install', and select the 'Shell Integration' option (this is off by default)
Use Windows Explorer Figure: Using Windows Explorer for your source control is a dream (great for designers too - who don't want to use VS.NET)
Suggestion to the TFS Team: I didn't see blame annotate in the drop down - which is a bit odd.
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Managers should regularly check to see if developers are committing their changes into source control. In TFS you can only get status by manually looking at each project or running "TFS status" command. A great tool is Attrice Team Foundation SideKicks which can display the status of all users and projects
Figure: Use TFS Sidekicks and search for files older than 48 hours to find the naughty boys.
Suggestion for TFS Sidekicks: Add a button to “Email all people their shame list”... showing their files that are still checked out (until then I do it manually).
Managers should regularly check to see if developers are committing their changes into source control. In TFS you can only get status by manually looking at each project or running "TFS status" command. A great tool is Attrice Team Foundation SideKicks which can display the status of all users and projects
(Warning: Stale branches can cause issues - See wiki for help)
Edit in GitHub
Frequently developers work on long or difficult features/bugs and leave code checked out for days or worse still, weeks.
What happens if your laptop hard drive dies?
What happens if you call in sick?
How can you pair program if not sharing your changesets?
Figure: Eating one big meal every three days gives you a bellyache... (aka check in small portions regularly, one large check-in after a few days will give you a headache)
That's why source code should be checked in regularly. We recommend a check-in:
Before leaving your workstation for an extended period of time
If the changes would break the build or are in a state that cannot be put into the main trunk, then this code should be put into a shelveset (sometimes referred to as 'sandbox') in source control.
Another good reason to check-in regularly is that it makes it easier to merge your changes with other developers. If all developers check-in lots of changes in one go, you will spend a lot of your time resolving conflicts instead of doing work.