Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 309721
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T07:46:04+00:00 2026-05-12T07:46:04+00:00

We are currently considering to move away from CVSNT, very probably to Subversion (because

  • 0

We are currently considering to move away from CVSNT, very probably to Subversion (because we are already using trac, which is well-prepared for SVN-integration). As we have been making rather extensive use of some less common CVS(NT)-features a couple of questions arose very early on. This is but the first of them.

Here’s the scenario:
(For the impatient: My actual question is at the very bottom of this post below the horizontal ruler.)

All of our “projects” share some common code. The directory hierarchy inside the CVS repository looks somewhat like this (simplified – hopefully not too much so):

  • Libs
    • Lib1
    • Lib2
  • External
    • ExtLib1
      • Docs
      • Source
    • ExtLib2
      • Docs
      • Source
  • ProjectA
  • ProjectB

…where ProjectA might for example be dependent on Lib1, Lib2, ExtLib1 and ExtLib2 and ProjectB dependent on Lib1 and ExtLib1 (actually this might be because Lib1 itself depends on ExtLib1). We modelled this by using the CVSROOT/modules file like so:

ExtLib1Full -d Lib/ExtLib1Full    External/ExtLib1
ExtLib1Src  -d Lib/ExtLib1/Source External/ExtLib1/Source
ExtLib2Full -d Lib/ExtLib2Full    External/ExtLib2
ExtLib2Src  -d Lib/ExtLib2/Source External/ExtLib2/Source

Lib1        -d Lib/Lib1           Libs/Lib1
Lib1_WDeps  -a ExtLib1Src Lib1
Lib2        -d Lib/Lib2           Libs/Lib2
Lib2_WDeps  -a Lib2

ProjectAMain -a ProjectA
ProjectALibs -a Lib1_WDeps Lib2_WDeps ExtLib2
ProjectAFull -a ProjectAMain ProjectALibs

ProjectALibs_OursOnly -a Lib1 Lib2
ProjectAFull_OursOnly -a ProjectAMain ProjectALibs_OursOnly

ProjectBMain -a ProjectB
ProjectBLibs -a Lib1_WDeps
ProjectBFull -a ProjectBMain ProjectBLibs

ProjectBLibs_OursOnly -a Lib1
ProjectBFull_OursOnly -a ProjectBMain ProjectBLibs_OursOnly

For a build of ProjectA the build server would now simply have to check out the virtual module named “ProjectAFull” to get all interdependent modules needed for that particular build – and even create the directory structure favoured by the compiler (i.e. external and internal libs both placed below a common “Lib” parent folder). Likewise when we want to tag a release including all dependencies we would simply use cvs rtag -rTagName ProjectAFull. When producing a ChangeLog we would use the output of cvs rlog ProjectAFull_OursOnly in order not to let the ChangeLog be polluted by commit messages from the external libraries (which we maintain using cvs import and vendor branches).


Is there an equivalent of these virtual modules in SVN? How should I set up the directory structure inside the new SVN repository to accommodate for this? Should each project and library become its own SVN project (i.e. with its own set of “trunk”, “tags” and “branches” folders) or should I simply import the existing directory structure as-is? How do I define the dependencies?
I would very much prefer to continue to be able to do single-step tag/checkout/log operations that would only affect the relevant modules.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T07:46:04+00:00Added an answer on May 12, 2026 at 7:46 am

    You should look at SVN Externals, but note that I am not sure that I understand what you’re doing with CVS, since I haven’t used CVS in years.

    Basically, an external reference means you can create a sub-directory beneath your project, and check out another project into that.

    Basically, you can get this layout:

    ProjectA      - svn://server/ProjectA
      classes      (svn://server/ProjectA/classes)
      app          (svn://server/ProjectA/app)
      externals    (svn://server/ProjectA/externals)
        Ext1      - svn://server/Ext1
          classes  (svn://server/Ext1/classes)
        Ext2      - svn://server/Ext2
    

    Explanation:
    – svn://… is the url I checked out, (svn://…) is the relative url of that directory, but it came as part of the checkout of the mother project directory.

    Note that the external references are added as properties to the “externals” directory, and committed into the repository as part of ProjectA. After you’ve added those properties, an update, or a fresh checkout, will automatically download both Ext1 and Ext2 as part of the normal checkout.

    This will give you working folders inside working folders, however, and you’ll need to commit changes and branch/tag those separately. Subversion does not allow you to do modifications to all those working copies and commit them all in one step.

    In other words, if in order to add a feature to the project, you change some files in ProjectA/classes, and then add some framework support on Ext1/classes, you’ll have to execute two commits, one for Ext1 and one for ProjectA.


    If you want a live example, here’s a sub-directory of my C# class library: http://vkarlsen.serveftp.com:81/LVK/LVK_3_5/trunk/LVK.UnitTests

    To checkout that directory, you’ll need to specify a username and password, both should be ‘guest’ without the quotes.

    External references in my class library unit test project includes both the “SigningKey” directory (check subversion properties on the main directory), as well as the contents of the “libs” sub-directory (check subversion properties on libs). As you noted, when you checked out the unit test project, it pulled down everything else it needed of libraries, well, except for the projects it tests.

    However, if I now add a unit test, and simultaneously update the version of the SQLite library files, I need to do 2 commits. One to get the new SQLite files into the repository, because it is a separate project/working folder, and one to get the new unit test into the repository.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 204k
  • Answers 204k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Found it. Add MyCollectionViewSource.View.Refresh() to a method that changes the… May 12, 2026 at 8:46 pm
  • Editorial Team
    Editorial Team added an answer Have you tried google? There are tons of large photos… May 12, 2026 at 8:46 pm
  • Editorial Team
    Editorial Team added an answer string[] foo = nonLetters.Select(c => c.ToString()).ToArray(); May 12, 2026 at 8:46 pm

Related Questions

I'm currently on a 4-person team tasked with the development and maintenance of a
We are considering a move from SVN to Mercurial, and have encountered a stumbling
Like many others on this site I am considering a move to ASP.NET MVC
I work on a large project in an organization that is (slowly) upgrading our

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.