How To: Copy a File from One VSS Project to Another

To COPY a file in VSS Explorer:

  1. Right-click the file in project A and hold.
  2. Drag it to project B.
  3. Drop it.
  4. Click Share and Branch.

I don’t know why SourceSafe’s creators chose to use Share &
 when the perfectly acceptable Copy was
available… but I can certainly guess.

For clues, I visited the original OneTree Software documentation for SourceSafe. 
In the section regarding Shared Files, I found this gem: “SourceSafe projects
are very analogous to operation system directories and folders. However, projects
have one valuable power that directories lack. Whereas every file in your operating
system exists uniquely in one directory, a SourceSafe file can exist in many different
projects at once!”

Exclamation point! As a writer, I can assure you that an exclamation point is a truly
meaningful (and telling!) entity. We don’t just throw exclamation points around
in shipping docs (!) like we do in our blogs!  In fact, I challenge you
to find one exclamation point in the entire Visual Studio and .NET Framework documentation
that is used for emphasis (in text).

I believe [conspiratorial voice here] that the choice of the verb Share and
thus Share and Branch* and thus the exclamation point(!) was
the direct result of a zealous, implementation detail-blinded software development
team’s attempt to differentiate and delineate its product and conceptual user model from
other applications. The subtext of this paragraph is, ‘Share is not the same
as Shortcut.  SHARE DOES NOT EQUAL SHORTCUT. We’re different from Windows.’ 
And to pound that point home, I’m guessing that SourceSafe’s creators chose to use
the Share and Branch command verb (or its equivalent*) over
the more universally understood and intuitive alternative: Copy
If my assumption is correct, this is one of the worst UI text blunders in history. 
I reserve the right to be wrong and invite your corrections, especially if you’re
a member of the original SourceSafe design team (c’mon, post as Anonymous). 🙂

*In early versions of SourceSafe, Branch was known as Separate.

זו מסופקת “כפי שהיא”
ללא כל אחריות או
חיובים, ואינה נותנת
לך זכויות כלשה.

Comments (8)

  1. RIchB says:

    In case you get an anonymous post, the original SourceSafe team consisted of just Brian Harry and Kenny Felder 😉

  2. Martin Brown says:

    Is my memory serving me correctly? I think it is not so many versions of VSS ago that there was no share and branch (copy) operation. To do a copy you had to first share the file and then branch it as a second action. I guess the team at the time just created a new routine that called the other two and thus the name.

  3. Mathieu says:

    The word ‘branch’ has a very specific meaning to a source control system user, and it’s not ‘copy’. It takes an extisting file and maintains a seperate history on it in a different location than the original file.

    If you were about to ship your product, foobar version 1.0, and then you had planned on continuing development by adding FEATURE_X to the product shortly after, it would be nice to keep a copy of foobar version 1.0 around so that you could respond to support queries and be able to offer a short-term service release if necessary. To accomplish this, you would share your project into a different location, and then branch the files. (In the best source control systems, this is an atomic operation so that it can’t be screwed up in the middle.)

    So, when you’re trying to ‘Copy’ a file from one place to another in VSS, do you really want a seperate copy of it or do you want the two files to be identical? I’m sure the original VSS developers knew that people would like to be able to do both. There is no other source control system that I am aware of that actually allows both, so it is actually a unique feature of VSS that you have the ability to share files between projects. The terminology could be changed to "Copy" and "Create Shortcut", but I wouldn’t expect a copied file to maintain it’s history any more than I’d expect a copied file in Explorer to maintain the last-modified-time…

  4. anon says:

    I used SourceSafe back when OneTree still sold it. I could be wrong, but I believe "share" and either "branch" or "separate" existed back in Win16 versions of SS (before Win95 was on the scene)…so the "share != shortcut" assertion may not be at the root of what they did.

    As an aside, does anyone remember the tree in the SS about box that would go through the four seasons if you left it onscreen?

  5. Me says:

    "Share and Branch" accurately implies that the copy retains a link to the original, and can subsequently be merged. "Copy" would imply to me that the copy is subsequently maintained completely independently from the original.

  6. hosebeast says:

    In addition to others’ points about history, a "shared" instance is different from the Windows concept of "shortcut" because you can delete any instance without deleting the actual file (until you have deleted all shared instances). In Windows, we have to differentiate between a shortcut and the real file. If you delete a shortcut, it leaves the file. If you delete the file, it leaves orphaned shortcut(s). NTFS junction points are closer to "share" (but not "share and branch").

  7. Kelley says:

    Correct me if I am wrong, but branching after the share, will erase the link that was made when chosing to share. So, sharing then branching would be the same as "Copy"