<?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>Adam Singer : TFS Version Control</title><link>http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx</link><description>Tags: TFS Version Control</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>He who permissions least, permissions best</title><link>http://blogs.msdn.com/adamsinger/archive/2007/05/23/he-who-permissions-least-permissions-best.aspx</link><pubDate>Wed, 23 May 2007 21:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2820276</guid><dc:creator>Adam Singer</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/2820276.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=2820276</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=2820276</wfw:comment><description>&lt;P&gt;I've heard a few questions and comments about our permission model recently. For example, some folks have asked why user in two groups, one granted a permission and one denied&amp;nbsp;the same&amp;nbsp;permission, is denied the permission rather than granted it. The answer lies in our permissioning model.&lt;/P&gt;
&lt;P&gt;Lets first define a few terms to get us all on the same page. Note that these are not necessarily official terms, they're just the terms I've used when discussing permissions with folks on the team here:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Identity: A user or group that may&amp;nbsp;be used&amp;nbsp;with the&amp;nbsp;permission system. Groups are&amp;nbsp;both external groups (e.g.&amp;nbsp;active directory security groups) and TFS groups (e.g. [SERVER]\Team Foundation Administrators)&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Securable object: An item in Team Foundation&amp;nbsp;which may have permission rights granted or denied to perform certain operations with the object. Examples are the folders and files stored in Version Control, Area nodes, Projects, and the Team Foundation Server itself.&lt;/LI&gt;
&lt;LI&gt;Explicit vs. Implicit: An explicit perimission for a given identity is assigned directly to that identity, while an implicit permission is assigned to a group the identity is a member of (either direct membership or through nested membership)&lt;/LI&gt;
&lt;LI&gt;Inherited vs. Immediate: While Team Foundation Server global and project permissions don't have a notion of inheritence, permissions on items stored in Version Control do. An inherited permission is assigned to one of the parents of a given securable object, while an immediate permission is set on the securable object itself.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Overall, we follow the same permissioning scheme as the Windows OS. A permission may be allowed, denied, or unset. Unless a permission is allowed (explicitly or implicitly, through inheritence or immediately on the securable object), the permission is denied. The only exception is for Administrator users who are always granted permissions (for Version Control, admin users are users who are Machine Administrators on the AT). Hence, if you don't want users to be able to be able to perform a given action, simply don't grant them permission to do so and don't add them to a group that's been granted that permission.&lt;/P&gt;
&lt;P&gt;From that notion comes the title of this post- keep your permission set as minimal as possible, and you won't run into situations where a user is a member of 27 groups, half of which are granted some set of permissions, half of which are denied some overlapping set, and all of which cause your head to spin.&lt;/P&gt;
&lt;P&gt;Now, that's not to say that you shouldn't set permissions on objects. Certain permissions are necessary to use the system in a reasonable way. Just remember that as soon as a user is denied a permision, whether explicitly or implicitly and whether the permission is inherited or immediate, no amount of grants at any level to any group will override the deny setting. Denied permissions are the trump card and should be used to specifically lock resources and components. Since all denies trump all allows aside from administrator status, users may be unable to perform actions if they're in two groups that have different permission settings.&lt;/P&gt;
&lt;P&gt;Let's walk through a simple example. Suppose you have four different groups- developers, testers, contractor developers, and contractor testers. Due to corporate policy, contractor developers may be disallowed from directly checking in changes&amp;nbsp;and locking files, while contractor testers may be disallowed from viewing the developer source code. Lets also suppose that the two contractor groups have been added to the other two groups (contractor developers to developers and contractor testers to testers). If your product code resides under the&amp;nbsp;Version Control path&amp;nbsp;$/AcmeCode/Product/, you could set permissions on the folder as follows:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;allow the "developers" group read, label, lock, pendchange, and checkin&amp;nbsp;access&lt;/LI&gt;
&lt;LI&gt;deny the "contract developers" group checkin and lock&amp;nbsp;access&lt;/LI&gt;
&lt;LI&gt;allow the "testers" group read access&lt;/LI&gt;
&lt;LI&gt;deny the "contract testers" group read access&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;All other permissions (e.g. "Undo other users changes") are unset for all four of these groups, so are treated as denied permissions unless the users are members of other groups. This permission set will completely lock out the "contract testers" group from that version control path, while the "contract developers" can read, label, and pend changes which they will then shelve to have a full developer check in.&lt;/P&gt;
&lt;P&gt;An alternate method would be to make the developers group a member of the contractor developers group (and not vice versa, only granting the "contractor developers" read, label, and pendchange permission while adding the lock and checkin permissions to the developer group. Of course, this seems a little weird from the perspective of someone looking at group containment and could therefore get confusing.&lt;/P&gt;
&lt;P&gt;So, that's a little long winded, but I hope it gets the point across and helps you make informed decisions about what our permissions mean.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2820276" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category><category domain="http://blogs.msdn.com/adamsinger/archive/tags/Team+Foundation+Setup+Admin+_2600_amp_3B00_+Ops/default.aspx">Team Foundation Setup Admin &amp;amp; Ops</category></item><item><title>Open and Switch Case</title><link>http://blogs.msdn.com/adamsinger/archive/2006/08/29/730271.aspx</link><pubDate>Tue, 29 Aug 2006 20:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:730271</guid><dc:creator>Adam Singer</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/730271.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=730271</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=730271</wfw:comment><description>&lt;P&gt;A few folks on the forums have asked how they can specify other editors to open files in Team Foundation version control. In particular, Acrobat&amp;nbsp;PDF&amp;nbsp;files have come up a &lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=175136&amp;amp;SiteID=1"&gt;few&lt;/A&gt; &lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=629524&amp;amp;SiteID=1"&gt;times&lt;/A&gt;. When investigating the issue, I discovered a workaround that I thought might be of general interest.&lt;/P&gt;
&lt;P&gt;To open a single file with a particular application:&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;Highlight the item in Solution Explorer&lt;/LI&gt;
&lt;LI&gt;Select the&amp;nbsp;"View" --&amp;gt; "Open With..." menu option&lt;/LI&gt;
&lt;LI&gt;Choose one of the default applications, or click "Add..." to choose a different application&lt;/LI&gt;
&lt;LI&gt;Click "OK" to open the document&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;To set an application as the default for all files with a particular extension, follow the above instructions, adding a step "3a" to click the "Set as Default" button. Afterwards, when you open items from Source Control Explorer, they will use the specified applicaiton, as well.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=730271" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>What you wish for</title><link>http://blogs.msdn.com/adamsinger/archive/2006/05/26/608196.aspx</link><pubDate>Fri, 26 May 2006 21:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:608196</guid><dc:creator>Adam Singer</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/608196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=608196</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=608196</wfw:comment><description>&lt;P&gt;As I depart the Version Control team, I'd like to make one final note about a particular request we've heard often. Many folks want us to get the latest version of a file when they check it out for editing. On the surface, this does seem like a good idea. However, I'll try to explain here why you don't really want what you think you want.&lt;/P&gt;
&lt;P&gt;Let's examine a few simple timelines. &lt;/P&gt;
&lt;P align=center&gt;&lt;EM&gt;Timeline 1: Single file edit&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;In the simple case, let's say you have two developers: Alice and Bob. After some changeset, let's say 10, both users have the latest version of all files. Alice checks out file "Program.cs", makes a change, and checks in to create changeset 11. Bob then tries to check out Program.cs. In the current implementation, he has the changeset 10 version of Program.cs, not the changeset 11 version, and will have to merge his changes with Alice's when he checks in changeset 12. The merge may not be very difficult, or it might have many conflicts, but Bob is eventually able to perform the integration, (re)run any necessary tests since he's now integrated Alice's changes, and then check in.&lt;/P&gt;
&lt;P align=center&gt;&lt;EM&gt;Timeline 2: Multiple file edit&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Now, let's get a little more complicated. Alice checks out both Program.cs and MainWindow.cs, edits them, and checks in to create changeset 11. Alice may have actually changed the APIs between Program.cs and MainWindow.cs or she may just have modified some of the internal functionality in each. Again, afterwards, Bob tries to edit Program.cs. He still only has the changeset 10 version, so will have to merge his changes when he checks in changeset 12. Seeing the resolve dialog when he tries to check in warns him "somebody else made a change!" &lt;/P&gt;
&lt;P&gt;If, however, Team Foundation Version Control silently performed a get operation to bring Program.cs up to changeset 11, Bob's workspace would have mismatched versions of Program.cs and MainWindow.cs. Suppose that one of Alice's changes in Program.cs relied on a change in MainWindow.cs - Bob's new code in Program.cs assumes the old MainWindow.cs behavior, and now when he checks in Program.cs itself is in a bad state. In the case of API change, on the other hand, Bob's project just went from building successfully to not building at all even though he hasn't even made his changes yet. If poor Bob doesn't try to build until after making his changes, he's then under the impression that his code changes broke the build rather than the automatic "Get Latest on Checkout" that TFVC performed.&lt;/P&gt;
&lt;P&gt;That's pretty lame, no? Poor old Bob now has a headache and he has to track down the cause of the build break. And when he finally figures it out, he then may run another get latest manually, picking up Cheri's changeset 12 and Daniel's changeset 13, each of which may conflict with Bob's existing pending changes and/or have other dependencies to worry about. We've just turned the snowball into an avalanche. If Bob was three files into a six file fix, he's now forced to deal with integrating other people's changes when what he really wanted to do was finish making his changes. Without the forced Get Latest on Checkout, Bob would have been able to have two separate phases for "make the fix" and "integrate with other people's changes".&lt;/P&gt;
&lt;P align=center&gt;&lt;EM&gt;Timeline 3: Concurrent file edit&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;As hairy as that scenario got, let's take it one step further and see why the fix doesn't actually avoid the problem. Suppose that we actually do have the Get Latest on Checkout in place. At changeset 10, Alice and Bob have the latest version. Then, both users check out Program.cs for editing. Since they both have the latest version, nothing is done to update their workspaces. Alice checks in changeset 11, and then Bob tries to check in changeset 12. Bob still has to perform a merge of his changes with Alices even though we added the extra capability.&lt;/P&gt;
&lt;P&gt;Therefore, by adding this capability to TFVC we've not only introduced other potential mid-fix merge issues, but we've also failed to fully resolve the original problem since Bob will still have to perform a merge operation prior to checkin.&lt;/P&gt;
&lt;P&gt;In practice, I've found that the files I don't have the latest version of when I check out are just a few of the shared helpers and central infrastructure. These are the components that are most likely to hit the "Bob checks out before Alice checks in" scenario anyway since many people might be making minor changes at any given time. If even one of them checks in a change after you began editing you'll have to merge when you try to checkin and you haven't saved any effort with the extra step of Get Latest on Checkout.&lt;/P&gt;
&lt;P&gt;Therefore, even though it's been one of the most asked-for features, I don't think the users who think they want it actually want it. Most likely, it will still get added, just like you can disable multiple checkout for a project - not generally a good idea IMHO, but it's there. I'd also like to say that, though I'm certainly far from a merge guru, I've come to stop fearing the three-way-merge process. It's actually quite simple and generally all of the work other than clicking "Auto Merge All" is done for you.&lt;/P&gt;
&lt;P&gt;In conclusion, be careful what you wish for. You just might get it.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=608196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>The CAT-5's out of the Bag</title><link>http://blogs.msdn.com/adamsinger/archive/2006/04/05/569337.aspx</link><pubDate>Wed, 05 Apr 2006 20:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:569337</guid><dc:creator>Adam Singer</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/569337.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=569337</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=569337</wfw:comment><description>&lt;P&gt;I'm sure many of you have read &lt;A href="http://software.ericsink.com/"&gt;Eric Sink&lt;/A&gt;'s "&lt;A href="http://software.ericsink.com/articles/Four_Questions.html"&gt;Four Questions&lt;/A&gt;". If you haven't though, I highly recommend it. [Thanks due to &lt;A href="http://www.woodwardweb.com/"&gt;Martin Woodward&lt;/A&gt; for &lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=331937&amp;amp;SiteID=1"&gt;linking&lt;/A&gt; to the post!]&lt;/P&gt;
&lt;P&gt;Now that we've shipped version one of Team Foundation Server, we've started getting a lot more feedback. It's great to see that so many people are interested in trying out the new toolset, and it's helped us learn what the "real world" use scenarios are like. What I've seen so far is that we weren't too far off on our core use test areas, though some of the complex combinations weren't tested as thoroughly. There haven't been any big surprises, which is a relief.&lt;/P&gt;
&lt;P&gt;Still, life continues and we're planning ahead regarding how we can make the product even better. I'm curious to know what your top pet peeves are with the current system, Version Control or otherwise. What can't you do that you'd like to? What works differently than how you expected? What snags have you hit that impact productivity? Are there any other problems you've found?&amp;nbsp;How much wood would a woodchuck chuck if a woodchuck could chuck wood?&lt;/P&gt;
&lt;P&gt;And remember, there are 10 types of people in the world: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Those who understand binary numbers.&lt;/LI&gt;
&lt;LI&gt;Those who don't.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I'm inclined to believe these groups map pretty well onto Eric's groups, but would be happy to hear arguments to the contrary.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=569337" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category><category domain="http://blogs.msdn.com/adamsinger/archive/tags/Team+Foundation+General/default.aspx">Team Foundation General</category></item><item><title>Recursion: It's what's for dinner</title><link>http://blogs.msdn.com/adamsinger/archive/2006/03/16/553292.aspx</link><pubDate>Fri, 17 Mar 2006 01:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:553292</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/553292.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=553292</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=553292</wfw:comment><description>&lt;P&gt;&lt;A HREF="/jmanning/archive/2006/03/16/553195.aspx#553270 "&gt;Silly&lt;/A&gt; though it may be, have you heard that &lt;A HREF="/jmanning/"&gt;James Manning&lt;/A&gt; posted that &lt;A HREF="/buckh/"&gt;Buck Hodges&lt;/A&gt; posted about &lt;A HREF="/robcaron/"&gt;Rob Caron&lt;/A&gt; talking about &lt;A HREF="/rickla/"&gt;Rick LaPlante's&lt;/A&gt; public announcement at &lt;A href="http://www.sdexpo.com/"&gt;SD West&lt;/A&gt; that &lt;A HREF="/robcaron/archive/2006/03/16/553177.aspx"&gt;Team Foundation Server ships tomorrow&lt;/A&gt;?&lt;/P&gt;
&lt;P&gt;On behalf of the Version Control QA Team, I'd like to offer a hearty:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080 size=6&gt;&lt;EM&gt;SHIP IT!&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=553292" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>[N]TFS and Alternate Data Streams</title><link>http://blogs.msdn.com/adamsinger/archive/2006/03/16/553246.aspx</link><pubDate>Thu, 16 Mar 2006 22:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:553246</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/553246.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=553246</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=553246</wfw:comment><description>&lt;P&gt;Perhaps you've heard of &lt;A href="http://support.microsoft.com/default.aspx/kb/105763"&gt;them&lt;/A&gt;. Files in NTFS may have multiple "Alternate Data Streams" (ADS), each with its own contents. It's an interesting concept, certainly, but one that requires all software written for NTFS to buy into it, which is always risky. For example, lets say we try:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;CODE&gt;C:\&amp;gt;&lt;EM&gt;echo a &amp;gt; foo.txt&lt;/EM&gt;&lt;BR&gt;&lt;BR&gt;C:\&amp;gt;&lt;EM&gt;echo b &amp;gt; foo.txt:bar&lt;/EM&gt;&lt;BR&gt;&lt;BR&gt;C:\&amp;gt;&lt;EM&gt;type foo.txt&lt;/EM&gt;&lt;BR&gt;a&lt;BR&gt;&lt;BR&gt;C:\&amp;gt;&lt;EM&gt;type foo.txt:bar&lt;/EM&gt;&lt;BR&gt;The filename, directory name, or volume label syntax is incorrect.&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Note that type doesn't know to look for the extra stream. Still, we can see it by running:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;CODE&gt;C:\&amp;gt;&lt;EM&gt;more &amp;lt; foo.txt:bar&lt;/EM&gt;&lt;BR&gt;b&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, suppose we want to edit the file. Let's say we're a big time DOS fan, and we still like &lt;CODE&gt;edit&lt;/CODE&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;CODE&gt;C:\&amp;gt;&lt;EM&gt;edit foo.txt&lt;/EM&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Let's change the first line to "a2" and then save and quit. Now, let's see what happened to our extra data stream:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;CODE&gt;C:\&amp;gt;&lt;EM&gt;more &amp;lt; foo.txt:bar&lt;BR&gt;&lt;/EM&gt;The system cannot find the file specified.&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It's gone! Suffice it to say, this is less than ideal.&lt;/P&gt;
&lt;P&gt;So, you may be wondering, what does this have to do with Visual Studio's Team Foundation Server Version Control? Well, let's give it a go:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;CODE&gt;&lt;EM&gt;echo a &amp;gt; file.cs&lt;BR&gt;echo b &amp;gt; file.cs:bar&lt;BR&gt;tf add file.cs&lt;BR&gt;tf checkin /i&lt;BR&gt;tf get file.cs /force&lt;BR&gt;more &amp;lt; file.cs:bar&lt;/EM&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Looks like the alternate data stream is gone. This is by design- we made the decision early on not to support ADS. One side effect is that if you've set metadata information on the "Properties" -&amp;gt; "Summary" page, this data will be lost upon checkin. Note, however, that this is not true for files like Microsoft Word .doc format for which this data is actually a part of the file itself rather than an ADS.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=553246" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>CLR and Present Danger</title><link>http://blogs.msdn.com/adamsinger/archive/2006/03/06/544656.aspx</link><pubDate>Mon, 06 Mar 2006 21:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:544656</guid><dc:creator>Adam Singer</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/544656.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=544656</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=544656</wfw:comment><description>Jeff Maxton recently pointed out an issue with Team Foundation and the Windows folder "encrypt contents" option. Briefly, the problem is this. Suppose you want to encrypt your working folders for your Team Foundation workspace. Theoretically, you should...(&lt;a href="http://blogs.msdn.com/adamsinger/archive/2006/03/06/544656.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=544656" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Test Team vs. The Matrix: Fight!</title><link>http://blogs.msdn.com/adamsinger/archive/2006/01/19/514849.aspx</link><pubDate>Thu, 19 Jan 2006 18:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:514849</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/514849.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=514849</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=514849</wfw:comment><description>&lt;P&gt;For the past few weeks, we've been running our Full Automation Run (FAR) against several dozen different Team Foundation Server configurations. We've tested everything from Workgroups to VPCs, Chinese to Turkish, IPv6 to 64bit machines. We reverently call the spreadsheet of test configurations "The Matrix", and The Matrix definitely has us...&lt;/P&gt;
&lt;P&gt;It's very interesting how testcode that worked fine on English product/English OS in a domain environment needed to be tweaked to pass as expected on other configurations. Two of the most interesting issues we've dealt with are as follows.&lt;/P&gt;
&lt;P&gt;In our Workgroup environment, usernames are in the form [AppTierMachineName]\joeblogs.&amp;nbsp;Since we'd originally used System.Windows.Forms.SystemInformation.UserDomainName&amp;nbsp;on the client to get the domain name, our "UserFullName" would be [ClientMachineName]\joeblogs and&amp;nbsp;any output that expected full name would fail. The workaround turned out to be more difficult than just dropping in the AT Machine name, since many of our test runs have two AppTiers. We need to first determine which server we're executing against, and then find its name. At the same time, we don't want to always make this change since we still have to run automation in Domain environments. The fix turned out to be a bit of a headache to piece together, but should now cover all the bases.&lt;/P&gt;
&lt;P&gt;The second issue occurred in non-English product FARs. We load the localized resource strings as part of each testcase so we can properly match expected to actual output. However, not all resources are localized. Some, such as "{0}: {1}" (also known as "AColonB") are only found in the default Neutral Language Resources. Therefore, we had to load both the neutral resources dll and the localized resource dll from two separate files. To do this, we'd been using &lt;A href="http://msdn2.microsoft.com/system.reflection.assembly.loadfile.aspx"&gt;Assembly.LoadFile&lt;/A&gt; for quite some time. We also used a testcode method on the GUI resource&amp;nbsp;strings to convert them from resources to actual expected values. However, the combination of these two only gave us English (i.e. Neutral) resources and so tests were failing left and right.&amp;nbsp;It&amp;nbsp;kind of made us feel like Neo&amp;nbsp;during&amp;nbsp;the fight scene in &lt;EM&gt;Matrix: Reloaded&lt;/EM&gt; where Neo battled dozens of Agent Smiths. Turns out that LoadFile was the culprit- in 2.0, LoadFile &lt;a href="http://blogs.msdn.com/suzcook/archive/2003/09/19/57248.aspx"&gt;doesn't really do what you wanted it to&lt;/A&gt;. After making the three character change, our pass rates skyrocketed.&lt;/P&gt;
&lt;P&gt;While it's definitely confidence inspiring product-wise&amp;nbsp;to discover that a test failure is due to test code rather than the product code, it's good to see more recent test runs experiencing fewer and fewer of these issues as we prepare to sign-off on the RC soon.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=514849" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Notable</title><link>http://blogs.msdn.com/adamsinger/archive/2005/12/01/498991.aspx</link><pubDate>Thu, 01 Dec 2005 20:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:498991</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/498991.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=498991</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=498991</wfw:comment><description>&lt;P&gt;After a bit of revising and internal processing, I'm the proud author of two &lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/reference/technotes/default.aspx"&gt;TechNotes&lt;/A&gt;! Both are topics I've posted here before, but if you'd like to see them in their next stage of evolution, here they are:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/reference/technotes/version_control/which_checkin.aspx"&gt;TN_1700: Which Team Foundation commands need to be checked in?&lt;/A&gt; &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/reference/technotes/version_control/lock_permission.aspx"&gt;TN_1701: How do Team Foundation Source Control locks and permissions differ?&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Check the TechNote page for more excellent resources on Team System, as well. You may want to bookmark, too, as I've heard there are quite a few more notes in the works.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=498991" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Looking at the world through rose-colored versionspecs</title><link>http://blogs.msdn.com/adamsinger/archive/2005/11/28/497645.aspx</link><pubDate>Tue, 29 Nov 2005 01:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:497645</guid><dc:creator>Adam Singer</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/497645.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=497645</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=497645</wfw:comment><description>&lt;P&gt;&lt;a href="http://blogs.msdn.com/jmanning/"&gt;James&lt;/A&gt;' post on the &lt;a href="http://blogs.msdn.com/jmanning/archive/2005/11/28/497474.aspx"&gt;DateTime versionspec&lt;/A&gt; reminded me that I wanted to post a brief summary of versionspecs in Visual Studio Team Foundation's Version Control.&lt;/P&gt;
&lt;P&gt;There are 5 different flavors of version specifications, each with its own syntax. Their one letter identifiers from the command line are ‘T’ for ‘tip’, ‘C’ for ‘changeset’, ‘D’ for ‘date’, ‘L’ for label’, and ‘W’ for ‘workspace’. For the purposes of our discussion, let's suppose we've got a server with a single solution named "Galactic Explorer" containing a file originally named "MyFile.cs". This file may have been edited, renamed, deleted, undeleted, branched, merged, etc. Let's say it's been changed in changesets 307 (add), 310 (edit), 311 (rename to aFile.cs), 312 (rename to AFile.cs), 317 (delete), and 319 (undelete and&amp;nbsp;rename to OldFile.cs). In particular, here's a snapshot of this &lt;A href="http://adamsinger.members.winisp.net/images/History.png"&gt;History dialog&lt;/A&gt; on this particular file. How can we access a particular version of this file? Why, by using our handy versionspecs!&lt;/P&gt;
&lt;P&gt;First and foremost, we have the "Tip" version specification. This is also called "Latest" in the UI. This versionspec indicates that we want to work with the most recent version of the file in the server. In the case of OldFile.cs, that would equate to changeset number 319. From the command line, we could say "tf get OldFile.cs;T" in order to retrieve the latest version of the file. If you don't specify a versionspec, "T" is assumed. Where this comes in handy, though, is if you want to compare another version to the latest: "tf diff MyFile.cs;C314~T". What's the "C314"? Well...&lt;/P&gt;
&lt;P&gt;Changesets, as I've mentioned before, are atomic groups of changes applied to files on the server. The changeset numbers are monotonically increasing and always increment by 1 from one change to the next. Each changeset number is unique among all changes on a given server, even if the affected items are in different team projects. When you specify a changeset versionspec, the server looks for the version of the item that existed when that changeset was checked in. In this case, if we specify changeset 314 of OldFile.cs (e.g. “tf get OldFile.cs;C314”), we’ll get the version that was checked in with changeset 312. It's also important to note that this is the default if you don't specify a letter-- "tf get OldFile;C314" is the same as "tf get OldFile.cs;314".&lt;/P&gt;
&lt;P&gt;Another way to specify an exact point in time is with the date versionspec. Since changesets occur at a single point in time, using the date version spec maps to the last changeset submitted before the specified time. For more, read &lt;a href="http://blogs.msdn.com/jmanning/"&gt;James&lt;/A&gt;’ post &lt;a href="http://blogs.msdn.com/jmanning/archive/2005/11/28/497474.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Labels are basically a collection of item/version pairs. A label may contain an arbitrary set of items on the server, and exist within a certain folder's scope. Users specify which version of the items to label when they apply the label to each specific item. For more on labels, check &lt;A href="http://msdn2.microsoft.com/en-us/library/ms181439.aspx"&gt;here&lt;/A&gt;. One important thing to note about label versionspecs is that any item not labeled will be considered as non-existent for the purposes of that command. For example, let’s say we have a label “MyLabel” applied to version C312 of OldFile.cs, among other files. Another file in the folder, “OtherFile.cs”, is not labeled by MyLabel but &lt;A href="http://adamsinger.members.winisp.net/images/HistoryOther.png"&gt;existed&lt;/A&gt; in changeset 312. Suppose we run get in that directory: “tf get * /version:LMyLabel”. We’ll see something like this:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;D:\Galactic Explorer\Galactic Explorer:&lt;BR&gt;Replacing AFile.cs (moved from D:\Galactic Explorer\Galactic Explorer\OldFile.cs)&lt;BR&gt;Deleting D:\Galactic Explorer\Galactic Explorer\OtherFile.cs&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;What happened? We got the pre-rename version of OldFile.cs. Then, the server noted that we’d asked for the version of OtherFile.cs in the label MyLabel. Since no such version exists, it removed the file. Thus, you can specifically exclude certain files from certain operations. This is important for consistency of our commands, as well. If you say "tf get OldFile.cs;C20", we'll remove the file from disk since it didn't exist in that version. The same goes for C317 and C318 since the file was deleted during those changesets.&lt;/P&gt;
&lt;P&gt;Lastly, there are workspace versions. At first glance, this may seem somewhat silly. Workspace version indicates the version last gotten in a particular workspace. Hence, if you simply say “tf get * /r&amp;nbsp;/version:W”, you’re telling the server to download the last version you downloaded. This should never do anything, though you can add the "/force" flag to redownload. However, you can append a different workspace here, such as "tf get */r /version:WMyOtherWorkspace" to get the same version in the current workspace as you have in another of your workspaces. Suppose that a coworker has found a bug and you want to reproduce it under a debugger. You can run “tf get * /r /version:WTheirWorkspace;DOMAIN\Coworker” to get the last version of the code which they downloaded. This is also handy for buddy testing before you unshelve someone else’s changes if you want to have the same setup that they have.&lt;/P&gt;
&lt;P&gt;I hope that helps clear things up a bit. Personally, I’m most likely to use tip, changeset, and date, though I have used the workspace version a few times. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=497645" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Twelve Step Programs</title><link>http://blogs.msdn.com/adamsinger/archive/2005/11/14/twelve-step-programs.aspx</link><pubDate>Mon, 14 Nov 2005 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:490077</guid><dc:creator>Adam Singer</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/490077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=490077</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=490077</wfw:comment><description>&lt;P&gt;Over the past few weeks, I've set up several Visual Studio Team Foundation Servers. Granted, this is something I've done a few dozen times since I first arrived, but I feel like I'm starting to get this down to a science. In any case, I wanted to post my own personal 12 steps to getting a combined&amp;nbsp;ATDT set up. It usually takes me about 4 hours, but then I'm also doing other things on my main machine at the same time.&lt;/P&gt;
&lt;P&gt;Setting up an ATDT Team Foundation Server:&lt;BR&gt;1) Reimage my machine to saved image of&amp;nbsp;Win2003 SP1 with Office installed&lt;BR&gt;2) Run Microsoft Update&lt;BR&gt;3) Create new image with latest patches&lt;BR&gt;4) Check e-mail, search net for new wallpapers, erase whiteboard, check e-mail, water bamboo plant, reorganize bookshelf, check e-mail&lt;BR&gt;5) Restart and join machine to Domain&lt;BR&gt;6) Install IIS 6.0:&lt;BR&gt;&amp;nbsp;- Make sure Frontpage Server Extensions are *not* checked&lt;BR&gt;7) Install SQL Server 2005&lt;BR&gt;&amp;nbsp;- Select all components&lt;BR&gt;&amp;nbsp;- Use the Default instance&lt;BR&gt;&amp;nbsp;- Use Local System account rather than a named account; at the bottom of the screen which asks you to select a user, check all boxes so that all services start automatically&lt;BR&gt;&amp;nbsp;- Use Windows Authentication&lt;BR&gt;&amp;nbsp;- Select the default collation and configuration options&lt;BR&gt;7a) If developer edition- open Sql Server Surface Area Configuration Manager. &lt;BR&gt;&amp;nbsp;- Open Surface Area Configuration for Services and Connections&lt;BR&gt;&amp;nbsp;- Make sure Analysis Services and Database Services both allow local and remote connections. If not, set them to and then restart all SQL components (via SQL Server Configuration Manager)&lt;BR&gt;8) Install Windows Sharepoint Services SP2&lt;BR&gt;&amp;nbsp;- Use Server Farm&lt;BR&gt;9) Rerun Windows Update&lt;BR&gt;10) Run ATDT installation&lt;BR&gt;&amp;nbsp;- Use two different users for service account and report account&lt;BR&gt;&amp;nbsp;- Choose to send out reports via an smtp server with reply address as the service account&lt;BR&gt;11) Install the Team Foundation Client (Team Explorer)&lt;BR&gt;&amp;nbsp;- Run PCW to create a scratch Team Project&lt;BR&gt;&amp;nbsp;- Run PCW again to create normal&amp;nbsp;Team Project used by our automated tests&lt;BR&gt;&amp;nbsp;- Add users to the project and server groups, as desired&lt;BR&gt;12) Test new setup by asking some hapless coworker to "try this out real quick".&lt;/P&gt;
&lt;P&gt;Works like a charm every time. I switch hapless coworkers on a dual-rotating basis to keep them guessing, though.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>My voice is my passport</title><link>http://blogs.msdn.com/adamsinger/archive/2005/11/07/489974.aspx</link><pubDate>Mon, 07 Nov 2005 23:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:489974</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/489974.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=489974</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=489974</wfw:comment><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 14pt"&gt;Locks vs. Permissions&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Visual Studio's Team Foundation Version Control has a very powerful access control model, permitting administrators to grant groups and individuals only the specific capabilities they need to do get the job done. Team Foundation provides two ways to control the abilities of authenticated users to use version control. You can either temporarily lock items or permanently set the users’ permissions. While both of these methods can be used to achieve some of the same ends, it’s often preferable to use one over the other. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;This is a brief overview of how these two access control mechanisms work to help you decide what’s best for you. We’ll first review the basics and then investigate the areas where they overlap. Specifics may vary depending on particular infrastructure, but there a few general guidelines to follow.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-SIZE: 14pt"&gt;Locking&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Locks can be placed on any version control item stored on the Team Foundation Server. If the lock is on a folder, it is implicitly recursive and thus applies to all sub-folders and files. Locks are considered “pending changes”, though they behave slightly differently from other pending changes. Instead of becoming active when checked in, they are active &lt;I style="mso-bidi-font-style: normal"&gt;until&lt;/I&gt; checked in or undone. Therefore, they are a quick and temporary way to prevent others from changing items on the server.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;Types of locks&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;There are two types of locks- check-in and check-out. Check-in locks prevent other users from checking in pending changes on the locked items, while check-out locks prevent people from pending changes at all. If other users already have pending changes on an item, you cannot lock that item for check-out. In this sense, a check-out lock is more powerful than a check-in lock since it prevents users both from pending changes and checking them in rather than just the latter.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;Locking rules&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;When locking a version control item, a few values are checked to make sure the lock can be set. First, users may only lock an item if they have the “Lock” permission on it. In addition, only one lock may apply to a given item at a time. Since this also applies to recursive locks, a user may not lock an item whose parent is locked by someone else. Conversely, a folder cannot be locked by someone if another user has a lock on a child of the folder.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-SIZE: 14pt"&gt;Permissions&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Permissions define the actions that groups and individuals are allowed to enact on the Team Foundation Server. It’s important to note that permissions are associated with items, though not with a particular version thereof. For example, if there are three versions of a file, there is no way to grant a user read access to only the first two.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;Global vs. Item&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;There are two types of permissions. Some apply to the whole system, while others affect individual files and folders. These are “global” and “item” permissions, respectively. Item permissions may be inherited, and generally are by default. However, you may tell an item not to inherit permission. You may also override inherited permissions by explicitly setting them on a given item.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;Setting permissions&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Permissions take effect as soon as they are set, and remain in effect until they are changed. Of course, as mentioned above, permissions apply to all versions of the affected items. This does not undo actions which have already occurred, however. This applies both to global permissions and item permissions. Pending changes on an item are not undone if a user loses the PendChange permission. If a user makes a workspace while they have the “CreateWorkspace” permission, their workspace does not disappear if they later lose this permission. They may continue to use the workspace as long as they have appropriate permission to access the server.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;Preventing change&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;There are two permissions in particular which allow users to change items on the server. The first is “PendChange” which allows users to add, branch, edit, merge, rename, delete, and undelete items. The second is “Checkin” which allows the users to check in the changes they pended.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-SIZE: 14pt"&gt;Head to Head&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So, let’s review some of the important differences:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Lock&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align=center&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Permission&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Duration&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Until check in&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Until changed&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Can turn off inheritance&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;No&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Per-user access control&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;No&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Restore previous state with Undo (or unlock to keep other changes)&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;No&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Can be set with current pending changes&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;No for “check-out”, Yes for “check-in”&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 185.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=247&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Prevent new changes&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 1.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=168&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes for “check-out”,&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;No for “check-in”&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #c1ccd9; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #c1ccd9; WIDTH: 131.4pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=175&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yes&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;What does this mean for you? Well, here are a few examples:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;Joe Developer is working on a hot fix for an important customer. While working on the task, he locks the relevant files for check-in to make sure that no one else checks in changes to the infrastructure until after his fix has gone in. When he checks in the files, they become unlocked and other users can get the new version to merge their changes and check in.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;SPAN style="mso-list: Ignore"&gt;2)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;The Ajax Company has hired a few summer interns. While they begin to learn the ropes, they’re required to pass all of their code to a full time employee for verification and checkin. The admin denies the group “Summer Interns” the Checkin permission on the whole tree. Instead, they can pend changes, shelve them, and then ask a coworker to unshelve them for review.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;SPAN style="mso-list: Ignore"&gt;3)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;Sally Architect needs to make some overarching changes which she knows will be difficult to merge with other changes. She locks the items for check-out to prevent anyone else from modifying these classes (since merging with Sally’s changes would be a headache). When she checks her changes in, users may once again pend changes on those items.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;SPAN style="mso-list: Ignore"&gt;4)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;Product Foo has just entered version 2, and the previous version has been branched to a separate folder. On the version 1 branch, the admins turn off inheriting permissions and only allow individual users the PendChange and Checkin permissions as needed for hot fixes.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;These are just a few examples of when each type of access control is useful. Though we could achieve similar behavior with either, each is particularly tailored for certain types of situations.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=489974" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>The Origin of the Specs</title><link>http://blogs.msdn.com/adamsinger/archive/2005/10/11/479863.aspx</link><pubDate>Wed, 12 Oct 2005 02:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:479863</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/479863.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=479863</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=479863</wfw:comment><description>&lt;p&gt;According to &lt;a href="http://en.wikipedia.org/wiki/Insect"&gt;Wikipedia&lt;/a&gt;, there are over 800,000 species of insect, only 82,000 of which are "&lt;a href="http://en.wikipedia.org/wiki/Hemiptera"&gt;true bugs&lt;/a&gt;". The same sort of thing can be said about work items in Visual Studio Team System if you drop a few orders of magnitude. Here's a quick note on the evolution of work items within our dogfood system.&lt;/p&gt;
&lt;p&gt;When I first arrived here a little over a year ago, we used our dogfood Team Foundation Server pretty much exclusively for product bugs. Some time after around the start of the new year, there were the occasional 'Task' or 'Scenario' items&amp;nbsp;thrown into the mix. The tasks mostly described non-developer deliverables, such as "prepare automated test runs to run as normal user." Scenarios were used to track the quality of a particular feature (it's "Overall Gut Feel", or OGF). Even so, the mix was still highly in favor of bugs by&amp;nbsp;a ratio of fifty to one.&lt;/p&gt;
&lt;p&gt;Over the duration of the Beta 2 final test passes, the ratio jumped to only ten to one, and included the new "Test Task" specifically designed to help track QA work such as test infrastructure, automation, and test planning. Then, through the start of summer, the ratio tilted wildly and showed only about&amp;nbsp;two bugs for every three non-bug items. We were doing extensive testplanning, test automation development, and other "behind the scenes" work here on the test team, and really started to take full advantage of the Team Foundation work item system.&lt;/p&gt;
&lt;p&gt;Since then, we've settled back to about a ten to one ratio as we've intermingled intense test passes with test development. Looking through the mix on my plate, I currently have two test tasks (one on a test failure to investigate and one code review), seven OGF tracking items updated every few builds, and seven localized OGF items. I have the occasional active bug assigned back to me to verify a repro or fix, test task on new infrastructure to write, and other such tasks. It's a rare day that I don't start&amp;nbsp;in by opening&amp;nbsp;"My Active Work Items" to help plan my schedule.&lt;/p&gt;
&lt;p&gt;The system really works, and has had the flexibility to track everything from the daily grind to the "big ticket" items. As a tester over on the Version Control team, I consider myself a moderately neutral observer, and I am definitely impressed.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=479863" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Because it is not the sky</title><link>http://blogs.msdn.com/adamsinger/archive/2005/10/07/478296.aspx</link><pubDate>Fri, 07 Oct 2005 19:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:478296</guid><dc:creator>Adam Singer</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/478296.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=478296</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=478296</wfw:comment><description>&lt;P&gt;We're testing the Japanese Beta3 version of Visual Studio Team System's Team Foundation Server. Of course, most of us don't actually know any Japanese, so we have to rely on computer translators to help us figure out what's going on. Not all of the translations come through as clearly as others, though. A few of my favorites are:&lt;/P&gt;
&lt;P&gt;"[local path] because it is not the sky, it cannot delete" (for "[local path] cannot be deleted because it is not empty")&lt;/P&gt;
&lt;P&gt;"There is no being less crowded territory which is sufficient for the disk." (for "There is not enough space available on disk")&lt;/P&gt;
&lt;P&gt;"File MSBuild1.Proj is not found. It draws up newly?" (for "Cannot find the MSBuild1.proj file. Do you want to create a new file?")&lt;/P&gt;
&lt;P&gt;"Label name 'test\test' is not effective" (for "The label name 'test\test' is not legal")&lt;/P&gt;
&lt;P&gt;"Folder $/project/ClassLibrary1 is a possibility check out without of being done" (for "The folder $/project/ClassLibrary1 may not be checked out")&lt;/P&gt;
&lt;P&gt;"There is no modification which is reset to the origin in the child of selective item or selective item" (for "There are no changes to undo in the selection or any children of the selection.")&lt;/P&gt;
&lt;P&gt;"Mouth" (for "Mouse" control panel)&lt;/P&gt;
&lt;P&gt;and, perhaps the most intriguing of all:&lt;/P&gt;
&lt;P&gt;"Loose Gesture" (for the Microsoft "Paint" application)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478296" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item><item><title>Playing with Power</title><link>http://blogs.msdn.com/adamsinger/archive/2005/09/16/469573.aspx</link><pubDate>Sat, 17 Sep 2005 00:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:469573</guid><dc:creator>Adam Singer</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/adamsinger/comments/469573.aspx</comments><wfw:commentRss>http://blogs.msdn.com/adamsinger/commentrss.aspx?PostID=469573</wfw:commentRss><wfw:comment>http://blogs.msdn.com/adamsinger/rsscomments.aspx?PostID=469573</wfw:comment><description>&lt;P&gt;As &lt;a href="http://blogs.msdn.com/crathjen"&gt;Chris&lt;/A&gt; says, we're very near the Beta 3 ship and the "ship it!" mantra is strong.&amp;nbsp;We've done some pretty crazy testing during this test pass, including some of my current favorites- intentionally self-induced network connectivity issues, full disks, stopped services, misconfigured firewalls, and all the rest to simulate "real world" network noise.&lt;/P&gt;
&lt;P&gt;I even got to test a bit with a computer that had hardware issues, though I didn't know it at the time. Apparently, it blew a few capacitors and needed its motherboard replaced. Quite the excitement trying to triage that one over the phone, let me tell you.&lt;/P&gt;
&lt;P&gt;Overall, I just have to say that I'm really impressed with the vast improvements since Beta 2. Performance is through the roof, stability is up, bugs are down, processes are streamlined, and we're all really excited about the product we've put together.&lt;/P&gt;
&lt;P&gt;After four weeks of hammering on this version, on a scale of 1 to 10, I rate it "SHIP IT!"&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=469573" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/adamsinger/archive/tags/TFS+Version+Control/default.aspx">TFS Version Control</category></item></channel></rss>