3

In reading the wikipedia article article on revision control, I found some terms that seem ambiguously-defined, and was wondering how they are actually used/applied in the real world. Specifically:

  • "Mainline" vs "Baseline"
  • "Branch" vs "Stream"
  • "Checkout" vs "Update"
  • "Vendor" folder vs artifact repo (like Maven or Ivy)

I am a contextual learner, so any concrete examples you could give would help the lightbulbs turn on a lot better.

With regards to the last one, what I mean is this:

At least in svn it is fairly standard to have a VC project structure of:

svnrepo/
    someProject/
        trunk/
        branches/
        tags/
        vendor/

Where vendor/ is a place to put external/3rd party dependencies that your configurations rely on. Alternatively, I've seen developers use tools like Maven or Apache Ivy to pull/publish artifacts (JARs and such) to/from a repository, such as an SFTP server. So when do you put 3rd party dependencies in your SCM under vendor/, and when do you put these dependencies in your Maven/Ivy repo?

Thanks in advance for clarification on any of these items!

IAmYourFaja
  • 55,468
  • 181
  • 466
  • 756

1 Answers1

1
  • "Mainline" vs "Baseline":
    The first term is a special kind of branch, which record the evolution of code, usually the one as seen in production. See this chapter.
    The second term is about a label (set on all the file of a component, ie a coherent set of files)

  • "Branch" vs "Stream":
    Branches have no hierarchies (you have a list of branches, and you merge from any branch to any branch). Streams have a hierarchy, which among other things allows for the definition of a merge workflow.

  • "Checkout" vs "Update"
    Checkout queries a specific version of the files and copy it on the disk.
    Update will make sure all the elements on the disk are up-to-date for the current selection rules.


  • "Vendor" folder vs "artifact repo" (like Maven or Ivy) An artifact repo doesn't offer versioning features like merging, diff, branches.
    A Vendor is a dedicated branch in a VCS (and should be avoided in my opinion: binaries are not welcomed in a VCS, unless for certain reasons)

So when do you put 3rd party dependencies in your SCM under vendor/, and when do you put these dependencies in your Maven/Ivy repo?

You should try to keep vendor libs outside of the VCS, only versionning the pom.xml (for instance) which records the configuration (ie list of labels) you need for the third-parties libraries.

Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250