<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mohamed Mahmoud (El-Geish) : Source Control</title><link>http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx</link><description>Tags: Source Control</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How to: Query all labels on a folder recursively?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/30/how-to-query-all-labels-on-a-folder-recursively.aspx</link><pubDate>Thu, 30 Apr 2009 07:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9578483</guid><dc:creator>mohamedg</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9578483.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9578483</wfw:commentRss><description>To do this, you can't call query labels with a wildcard character, you need to do the following: - Get all items blow $/Dir1 using GetItems - Loop through them calling QueryLabels on each one. Here's a code snippet: VersionControlServer sc = tfs.GetService&amp;lt;...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/30/how-to-query-all-labels-on-a-folder-recursively.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9578483" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Move a shelveset to another branch?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/30/how-to-move-a-shelveset-to-another-branch.aspx</link><pubDate>Thu, 30 Apr 2009 07:46:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9578413</guid><dc:creator>mohamedg</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9578413.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9578413</wfw:commentRss><description>A very handy power tool is tfpt unshelve. It’s capable of migrating a shelveset from a branch to another, it does that by performing a baseless merge, so you will need to resolve the conflicts produced. The syntax of the command looks like the following:...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/30/how-to-move-a-shelveset-to-another-branch.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9578413" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Diff shelved files?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-diff-shelved-files.aspx</link><pubDate>Sat, 18 Apr 2009 10:34:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554899</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9554899.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9554899</wfw:commentRss><description>You can run: tf diff /shelveset:shelvesetName;DOMAIN\ownerUserName Please note that this will diff the shelved changes against the unmodified version, not necessarily the latest version, just like what the you get from clicking compare in the shelveset...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-diff-shelved-files.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9554899" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: List changesets between two labeled versions?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-list-changesets-between-two-labeled-versions.aspx</link><pubDate>Sat, 18 Apr 2009 10:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554894</guid><dc:creator>mohamedg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9554894.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9554894</wfw:commentRss><description>You can achieve that behavior by running: tf hist rootItemSpec /r /version:LstartLabel~LendLabel Here’s my scenario: tf hist /i File.cs Changeset Change User Date Comment --------- -------------------------- ------------- ---------- -------- 65 edit mohamedg...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-list-changesets-between-two-labeled-versions.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9554894" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: View history of an item across branches?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-view-history-of-an-item-across-branches.aspx</link><pubDate>Sat, 18 Apr 2009 10:01:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9554889</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9554889.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9554889</wfw:commentRss><description>You can use tfpt history /followbranches to follow the history of an item across branches. We are looking into supporting this in the history dialog in the next version . You can see which versions are ported over during the merge operation if you use...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/18/how-to-view-history-of-an-item-across-branches.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9554889" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category></item><item><title>How to: Switch between TFS and VSS in old IDEs?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/16/how-to-switch-between-tfs-and-vss-in-old-ides.aspx</link><pubDate>Thu, 16 Apr 2009 07:41:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9552167</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9552167.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9552167</wfw:commentRss><description>If you have an IDE that uses the MSSCCI provider, like VS 2003 or VB6, and you want to switch between TFS and VSS because you have projects on both systems, you will have to change the provider every time you switch. The thing is that setting is stored...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/16/how-to-switch-between-tfs-and-vss-in-old-ides.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9552167" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Copy workspace mappings?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/13/how-to-copy-workspace-mappings.aspx</link><pubDate>Mon, 13 Apr 2009 07:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9546687</guid><dc:creator>mohamedg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9546687.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9546687</wfw:commentRss><description>A common scenario that you may see is the need to share/sync workspace mappings amongst team members. A developer adds a new dependency in a certain project and changes his/her mappings to get this library, and everyone else in the team now needs to do...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/13/how-to-copy-workspace-mappings.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9546687" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Switch branches in a workspace without getting all the files of the new branch?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/11/how-to-switch-branches-in-a-workspace-without-getting-all-the-files-of-the-new-branch.aspx</link><pubDate>Sat, 11 Apr 2009 11:17:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9544974</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9544974.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9544974</wfw:commentRss><description>One of the new features added in VSTF 2008 SP1 is that you can switch to another branch in your workspace and you don’t need to download all the files of the new branch. TFS will only download the files that differ in the new branch, if you use tf get...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/11/how-to-switch-branches-in-a-workspace-without-getting-all-the-files-of-the-new-branch.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9544974" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Move your workspace to another drive?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/10/how-to-move-your-workspace-to-another-drive.aspx</link><pubDate>Sat, 11 Apr 2009 01:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9544144</guid><dc:creator>mohamedg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9544144.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9544144</wfw:commentRss><description>A common problem occurs when the drive that contains your workspaces runs out of disk space, or when you find yourself in a situation that you have to move your workspace to another drive. This might get tricky because your workspace mappings are stored...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/10/how-to-move-your-workspace-to-another-drive.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9544144" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to get list of changes in a shelveset programmatically?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/07/how-to-get-list-of-changes-in-a-shelveset-programmatically.aspx</link><pubDate>Wed, 08 Apr 2009 04:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9537190</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9537190.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9537190</wfw:commentRss><description>In a previous post , we used the command-line to list the changes in a shelveset. This time we are going to use an API to get the changes by calling: VersionControlServer.QueryShelvedChanges You have to be a valid user that can connect to Version Control,...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/07/how-to-get-list-of-changes-in-a-shelveset-programmatically.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9537190" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>Pitfalls of baseless merge</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/07/pitfalls-of-baseless-merge.aspx</link><pubDate>Tue, 07 Apr 2009 09:09:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9535334</guid><dc:creator>mohamedg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9535334.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9535334</wfw:commentRss><description>A previous post was dedicated to show the benefits of a baseless merge, this one shows the pitfalls: When you perform a baseless merge, renames and deletes will not be merged If you get conflicts, the usual 3-way merge is not possible, you will have to...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/07/pitfalls-of-baseless-merge.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9535334" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category></item><item><title>How to: List changes in a shelveset?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/04/02/how-to-show-changes-in-a-shelveset.aspx</link><pubDate>Thu, 02 Apr 2009 07:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9528565</guid><dc:creator>mohamedg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9528565.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9528565</wfw:commentRss><description>When you run tf shelvesets shelvesetName /format:detailed you get the shelveset’s name and some metadata associated with it, but not the changes. To get a list of the changes in a changeset, run: tf stat /shelveset:shelvesetName;DOMAIN\ownerUserName The...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/04/02/how-to-show-changes-in-a-shelveset.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9528565" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Disable multiple check-out on a folder?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/03/25/how-to-disable-multiple-check-out-on-a-folder.aspx</link><pubDate>Wed, 25 Mar 2009 07:24:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9506324</guid><dc:creator>mohamedg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9506324.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9506324</wfw:commentRss><description>There’s no direct way to do that. Multiple check-out is a property of a team project, it's not namespace specific. However, I can think of 2 alternatives using use the &amp;quot; Lock &amp;quot; feature, because that’s what TFS does when a team projects is set...(&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/03/25/how-to-disable-multiple-check-out-on-a-folder.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9506324" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Find distinct changes by user?</title><link>http://blogs.msdn.com/mohamedg/archive/2009/03/23/how-to-find-distinct-changes-by-user.aspx</link><pubDate>Tue, 24 Mar 2009 05:34:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9503206</guid><dc:creator>mohamedg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9503206.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9503206</wfw:commentRss><description>&lt;p&gt;You can find changesets if you open Source Control Explorer and hit Ctrl+G or choose Edit &amp;gt; Go to…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mohamedg/WindowsLiveWriter/HowtoFinddistinctchangesbyuser_13D4F/FindChangesets_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="FindChangesets" border="0" alt="FindChangesets" src="http://blogs.msdn.com/blogfiles/mohamedg/WindowsLiveWriter/HowtoFinddistinctchangesbyuser_13D4F/FindChangesets_thumb.jpg" width="241" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However, this shows changesets with no details, you have to double click it first. If you want to see detailed info all at once, you can use the command-line:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;tf hist /i /r /format:detailed /u:Adam itemSpec&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This shows all details for all changesets made by Adam that contains any item in the tree specified in the command. To list changes only, you can pipe the output to find &amp;quot;$/&amp;quot;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;tf hist /i /r /format:detailed /u:Adam itemSpec | find &amp;quot;$/&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This will show the changes but they might contain duplicates, to generate a unique list, you can run:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;FOR /F &amp;quot;tokens=*&amp;quot; %i IN ('tf hist /i /r /format:detailed /u:Adam itemSpec ^| find &amp;quot;$/&amp;quot; ^| sort') DO @find &amp;quot;%i&amp;quot; &amp;lt; out.txt &amp;gt; NUL || @echo %i &amp;gt;&amp;gt; out.txt&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9503206" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category></item><item><title>Deny: revisited</title><link>http://blogs.msdn.com/mohamedg/archive/2009/03/23/deny-revisited.aspx</link><pubDate>Tue, 24 Mar 2009 04:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9503139</guid><dc:creator>mohamedg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mohamedg/comments/9503139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mohamedg/commentrss.aspx?PostID=9503139</wfw:commentRss><description>&lt;P&gt;In a &lt;A href="http://blogs.msdn.com/mohamedg/archive/2009/03/18/deny.aspx" target=_blank mce_href="http://blogs.msdn.com/mohamedg/archive/2009/03/18/deny.aspx"&gt;previous post&lt;/A&gt;, I talked about the deny option and how it’s evaluated. The documentation on MSDN is talking about conflicting permissions on the same level, however, in TFS2008 SP1, permissions are evaluated bottom up and the first match wins. If a user, Eve, is denied read on $/ but is a member of [Proj]\Readers (which has Read access), the read permission will be the first match and Eve will be to read $/Proj recursively. If you need to deny users read permission, you have to make sure to remove them from all groups that has read access. The reason behind this design is that administrators usually want to allow permissions for certain projects to certain users and the rest should be denied, consider the following tree structure: &lt;/P&gt;
&lt;P&gt;$/ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Proj A &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Proj B &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Proj C&lt;/P&gt;
&lt;P&gt;You may want to grant Eve read permission on Proj B and only Proj B. To do so, you should deny Eve all permissions on $/ then allow Eve read permission on Proj B. Since permissions are evaluated bottom-up on first-match basis, Eve has read access to proj B, while the denied permissions are effective on both existing projects and future projects D, E, F, ..etc.&lt;/P&gt;
&lt;DIV&gt;Let me explain again why the behavior is as such. If you have 100 projects on your server and you want to allow&amp;nbsp;Eve&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt; read access on one project only, then you can deny at the $/ level then allow on the $/Proj level. However, if we don't permit you to do so, you'd have to go through 99 projects to deny read instead. And by the way, TFS behavior is the same as Windows when you set permissions on folders.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;Please note that there are two types of permissions inheritance, member of a group (subjects of the ACL) inheritance, and namespace (objects&amp;nbsp;of the ACL) inheritance. As a member of a group (directly or indirectly), you inherit permissions. The same thing applies to namespaces, if it's a child of a parent folder, it inherits the parent's permissions (this can be turned off on an item basis using &lt;SPAN style="FONT-WEIGHT: bold" class=Apple-style-span&gt;tf perm itemSpec /inherit:no&lt;/SPAN&gt;).&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;IMO, the right thing to do here is to create the groups correctly, use Windows and/or TFS groups to isolate users with different permissions.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;If you still want set the permission on all exisiting projects individually, here's a script that can help:&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="COLOR: rgb(8,8,8); FONT-SIZE: 13px" class=Apple-style-span&gt;&lt;SPAN style="FONT-WEIGHT: bold" class=Apple-style-span&gt;FOR /F "delims=$ tokens=*" %i IN ('tf dir $/ ^| find /v "/" ^| find /v "(s)"') DO tf perm /deny:* /group:"[Server]\TFS External Users" "$/%i"&lt;/SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9503139" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mohamedg/archive/tags/VSTF/default.aspx">VSTF</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.msdn.com/mohamedg/archive/tags/Security/default.aspx">Security</category></item></channel></rss>