90
votes

We have multiple config files (app.DEV.config, app.TEST.config, etc) and a pre-build event that copies the correct config file to app.config. Obviously the configuration specific files are in source control --- but at the moment so is App.Config, and that shouldn't be.

How can I mark that one file as excluded from source control, but obviously not from the project.

I'm using VS 2005, and 2005 Team Explorer.

12

12 Answers

95
votes

It's easy in TFS2012, create a .tfignore file

http://msdn.microsoft.com/en-us/library/tfs/ms245454%28v=vs.110%29.aspx#tfignore

######################################
# Ignore .cpp files in the ProjA sub-folder and all its subfolders
ProjA\*.cpp
# 
# Ignore .txt files in this folder 
\*.txt
#
# Ignore .xml files in this folder and all its sub-folders
*.xml
#
# Ignore all files in the Temp sub-folder
\Temp
#
# Do not ignore .dll files in this folder nor in any of its sub-folders
!*.dll

# EDIT https://msdn.microsoft.com/en-us/library/ms245454(v=vs.110).aspx#tfignore
# A filespec is recursive unless prefixed by the \ character.
47
votes

Select the App.config file in Solution Explorer, and choose File -> Source Control -> Exclude App.config from Source Control.

39
votes

There is a checkin policy (Forbidden Patterns Policy) in the MS Power Tools which lets you screen filenames against a regular expression. See: Microsoft Team Foundation Server Power Tools

While checkin policies are not completely foolproof, they are the closest thing TFS has to enforcing user-defined rules like what you're looking for.

(And as the others have said, you can also cloak a file or folder, which means it stays in Source Control and is visible to everyone else on the team, but it's not copied to your PC until you decide to uncloak it; or you can delete the file, which means it gets deleted from everybody's PCs when they get latest - but neither of these options will prevent such files being added to source control in the first place)

24
votes

There is an option that is hard to find:

1. Select the file or multiple files in Solution Explorer

2. Go to File -> Source Control -> Advanced

Path To Exclude

and here it is

Here is the Exclude

Keep in mind: If you right click a file in Solution Explorer you only find "the most important options" not all :)

13
votes

If all you want is to have a file in the project but not under source control with TFS, just go into SourceControl, delete the said file, and undo your checkout of the project file (it will attempt to remove the file from the project as well). Then check-in your delete of the file you are excluding. In the solution explorer you should see that there is no source control icon next to the file you're excluding. The project file should list a file there, but that file should now no longer be under source control.

Keep in mind, any other person will now see a missing file in the project when they get latest.

7
votes

TFS allows you to cloak at the folder/file level. When something is cloaked, TFS won't attempt to sync it (much like a svn:ignore).

When setting up your workspace, cloak anything you want TFS to ignore. A more detailed how-to is here.

5
votes

This worked for me:

One way is to add a new or existing item to a project (e.g. right click on project, Add Existing Item or drag and drop from Windows explorer into the solution explorer), let TFS process the file(s) or folder, then undo pending changes on the item(s). TFS will unmark them as having a pending add change, and the files will sit quietly in the project and stay out of TFS.

Source: =">How can I exclude a specific files from TFS source control

2
votes

Visual Studio 2013 (and 2012)

This feature is available by selecting the file(s) and going to:

File > Source Control > Advanced > Exclude ... from Source Control
2
votes

This question was asked a while ago but it pertains to the same type of issue I was having.

The Problem:

  • We want to check in our code.
  • We then want build our project.
    • During our build we depend on Build Events to move files around so we have the proper files in place for the build process to complete.
  • When our Build Event tries to copy the files, we get Access Denied errors.

The Reason:

  • Team Foundation Server Visual Studio Plugin changes the Read Only attribute on our files to READONLY TRUE when we check in our files.

Build Event Example:

  • copy "$(TargetDir)SomeFile.ext" "$(ProjectDir)"

Above, we simply need to move a file from our Target Build Path (the bin\debug or bin\release folders) to our Project Folder. In my situation, this was so I could include project built files in my installer. My Installer wasn't grabbing them as part of the Project Output.

The Fix: (nearly kicked my self in the face when I figured this out)

New Build Event:

  • attrib -R "$(ProjectDir)SomeFile.ext"
  • copy "$(TargetDir)SomeFile.ext" "$(ProjectDir)"
  • attrib +R "$(ProjectDir)SomeFile.ext"

We're all having fun with Build Events right? Above I simply do 2 things, I remove the read only attribute, now the files not read only. Copy my file as I was originally wanting to. Then replace the Read Only Attribute (optional I guess) to keep Visual Studio and Team Foundations happy.

And yes... I'm still kicking myself in the face on this one.

0
votes

I have a similar issue, my App.config contained sensible data (e.g. username) that this data should not by sync with TFS.

The article Best practices for deploying passwords and other sensitive data to ASP.NET and Azure App Service describes an good approach to prevent this issue:

Use the "file" attribute of the "appSettings" element to reference an config file that is not added to source-control

0
votes

If you have an older version than TFS2012 and thus can't create a .tfignore file or use the File > Source Control > Advanced > Exclude … option, you can try this:

  • Make a copy of the target file in Windows Explorer.
  • Undo Pending Changes (if any) on the target file in Team Explorer/Visual Studio.
  • Delete the target file in Windows Explorer.
  • Move the copy of the target file to the location of the deleted target file, and rename it so it has the same name as the deleted target file.

TFS now seems to ignore the changes in the target file. If you need to edit the file again, don't use Visual Studio, as TFS will then put the file back in the list of files with Pending Changes.

0
votes

You can just simply select the file from your Source Control Explorer and Right Click on it, and the select the "Rename" option from there, and you can add ".exclude" at the end of the file name.

And then do remember to check-in the file, and after that you can see that your file is excluded from Source Control.