如何使用 sharpsvn 正确生成复杂的外部结构?

How to correctly generate a complex externals structure with sharpsvn?

我有一个使用颠覆的非常复杂的存储库结构。这在很大程度上与我的团队的局限性、安全要求和项目的依赖性有关。因此,此处使用的结构 not 是可选的,不能更改。

存储库结构由以下模式组成:

root-|- main -|- branches
     |        |- tags
     |        |- trunk - main - plugins
     |
     |- modules -| - module1 -|- branches
                 |            |- tags
                 |            |- trunk - module1 - plugins - plugin1
                 |            |- modules - ...
                 |
                 | - module2 -|- branches
                 |            |- tags
                 |            |- trunk - module2 - plugins - plugin2
                 |            |- modules - ...

每个外部源都是一个pluginX文件夹。目标是下一级trunk的plugins文件夹(或main的plugins文件夹)。不幸的是,API 的文档几乎不存在。我怀疑我需要以某种方式使用 propset 函数,但是在我能找到的任何地方都没有描述如何指向特定的目标目录和源目录,也没有找到任何示例。

编辑:每个模块都可以单独拉出并独立于根项目工作。我不能只为此使用根。见鬼,我连这个问题的敌意回应都得不到!!

在'root'文件夹中创建一个文件夹build并使用relative path引用您解决方案中的项目,然后将其output folder的所有项目配置为build\xxx folder,所有输出文件夹也是 relative path。并在主程序中,重新配置 assembly bindings 为相对路径。使用这种模式,无论谁下载 repo,他们都可以将项目编译到相同的根文件夹,并使用相同的配置进行调试。

对于非常复杂的依赖,比如A=>B=>C=>D,第一次打开方案A,如果B/C/D没有编译没有被引用,那么A会出现引用警告,您必须打开并编译 B&C&D,然后 A 才能工作。但一般情况下,我们应该在方案A中加上B/C/D,这样,第一次打开就不会再报错了。

有时候,有些源代码并不对所有开发者开放,所以他们只能得到一个编译好的dll,对于那些dll,我们需要另一个文件夹(比如'tools'),它包含了Source中所有编译的程序集代码服务器。我们在解决方案中添加 file referencesrelative path,并将它们配置为 "Copy to local"=true

对于许多项目,我们将使用 post-build 或 pre-build 事件从某处加载或复制文件,它们也必须是相对路径。

回答我自己的问题。我正在使用的库有一个函数,可以在给定该文件夹的绝对路径的情况下为本地系统中的给定文件夹设置外部。该库是 C 版本库的一个端口,显然作者只是假设人们会 "just know" 去那里看。