2010-02-19 194 views
0

我试图添加类似:SVN的外部到子目录仅保持叶目录在SVN

subdir 
    modules 
    module1ext 
    module2ext 
    module3NOText 
    other dir not from externals 

其中子目录/模块/模块{1,2} EXT在外部对象定义具体地,但not/subdir和/modules.This基本上增加了模块{1,2} ext到svn仓库,但不是subdir和模块。

所以,现在我想在subdir(其他dir不是来自外部)或模块(module3NOText)下添加一个目录,我不能,因为父目录不在svn下。我应该svn添加它们吗?这不会弄乱外部定义吗?

另外,假设我想修改module1ext。我正在考虑删除外部定义,然后svn添加该目录。从我的经验来看,这是有效的,但是你能告诉我它是否有任何不利之处或者它应该完成吗?

回答

1

你似乎在这里混合了一些东西。

你的版本库应该是这样的:

trunk 
    subdir 
    modules ---------> property svn:externals with links to module1ext and module2ext 
     module3NOText 
    otherdirnotfromexternals 

当检查出的树干,所有的文件夹(子目录,模块,module3NOTExt,otherdirnotfromexternals)是SVN版本控制之下。模块应该包含两个外部模块(如果svn:externals属性设置正确)。

因此,在subdir或模块下添加一个目录应该通过svn add来完成。

如果您想修改外部代码,您可能还想跟上原始存储库中的可能更改。换句话说,你想创建一个分支。

  • 如果代码是在同一个版本库,你可以简单地使用svn copy创建一个分支,并使用svn merge
  • 如果代码是在另一个仓库,你可以管理这个作为vendor branch。简而言之:您可以将代码导入到您自己的存储库中,标记它以标记您开始的点,将其分支到您自己的项目并从那里进行修改。要合并原始代码中的更改,请在供应商分支中导入新版本,再次对其进行标记并将更改合并到项目分支中。
+0

实际上,这个想法是使用供应商分支到一个核心回购(技术上来说是一个分支,但我最近主要使用HM,所以...),然后通过svn:exports从该核心派生出多个回购。所有的合并都是在核心层完成的,然后,svn:exports将传播它们。核心和衍生回购之间的差异是附属模块。我发现svn:externals被视为一个独立的repo,导致它的subdirs不会自动添加,你真的需要svn add,然后你得到你提到的结构。谢谢。 – Neo 2010-02-22 15:28:45

+0

@Neo你能否详细说明你的意思是“svn:外部被视为一个独立的repo,并且subdirs不会自动添加”?我不明白这个... – jeroenh 2010-02-22 17:43:01