2

我有一个解决方案,我正在尝试创建第二个可执行文件。这两个可执行文件共享大部分相同的文件,但有一些不同的文件,包括资源和应用程序图标等。

我创建了第二个项目,并将项目添加为链接。:

  1. 右键单击“添加现有项目”
  2. 浏览它,
  3. 单击“添加”下拉菜单并选择“添加为链接”

添加为链接意味着它只是引用另一个文件夹中的另一个文件而不复制它。

现在,当我尝试提交我的项目时,VisualSVN / SVN 尝试在它们所属的逻辑路径中对这些文件进行 SVN 添加,导致很多错误,即找不到文件。它导致整个提交失败,并且是一个主要的痛苦。

有没有一种好方法可以添加文件链接而不会产生副作用?我试图链接到的所有文件都已经在同一个仓库中。

更新

也许我应该添加更多关于我正在努力完成的信息,因为我愿意接受任何有助于我完成它的建议。

我有一个类似这样的项目结构......或者我希望它是这样的......

我的项目
  /常见的
    业务数据对象(svn:外部)
    控件库(svn:外部)
    其他CommmonLib1 (svn:external)
    其他CommonLib2 (svn:external)
  /模块
    模块1
    模块2
    模块3
    ...
   应用1
   Application2(共享所有 App1 的文件,除了不同的 .resx、图标、名称、其他细微差别)
   SetupProject1(包括 app1 和某些模块 dll)
   SetupProject2(包括 app2 和某些模块 dll)

该应用程序基本上是一个空壳(使用 Prism),它加载安装在 /modules 文件夹中的模块。我希望两个应用程序几乎相同,但我希望它们具有不同的名称和不同的图标。我想我可以通过将第一个项目中的文件作为链接添加到第二个项目中来实现这一点,并简单地交换一个资源文件,其中包括应用程序窗口标题、关于对话框等的字符串。但是然后是 VisualSVN 或任何尝试 SVN添加那些我没想到的项目。

我需要能够开发模块和应用程序的外壳项目。它们在任何方面都不稳定。我只是希望它们彼此接近,但命名差异很小。我认为有两个应用程序项目,我可以有两个设置项目,其中包括每个应用程序的输出以及应该包含在该软件程序版本中的任何模块。

我试图使它尽可能万无一失,并且我想避免必须更新对同一项目的外部引用。(我对此也有点困惑,我会 svn:external 到同一个repo 吗?)这听起来不太好,但这是我关于如何创建两个几乎相同的应用程序的主要想法。如果我不能让我的版本控制软件正常运行,我不确定我会怎么做。

我曾口头建议我们只有一个版本的软件,并升级某些模块,但有一些很好的理由他们不能真正做到这一点。

4

3 回答 3

1

当您使用“添加为链接”将文件添加到 Visual Studio 项目时,预计该文件不会复制到项目的文件夹中。

VisualSVN 会考虑工作副本中项目的状态,甚至是当前解决方案中未包含的文件。但是,工作副本中不存在链接文件,因此无法跟踪。它超出了版本控制。

由于您尝试链接的文件已经受版本控制(即它们存在于 SVN 存储库中),因此使用外部定义svn:externals属性)来链接它们是有意义的。

另见TortoiseSVN 手册;它的描述svn:externals真的很好。

于 2012-12-24T11:43:57.727 回答
1

你没有提到你的环境。但是,您提到您有一个解决方案。我假设您使用的是 VisualStudio。

您是否尝试过 AnkhSVN,它是 VisualStudio 的 Subversion 的源代码控制提供程序?AnknSVN 集成到 VisualStudio 中很像微软的 Visual SourceSafe 和 TeamFoundation 的本机版本控制系统。我相信您可以使用 AnknSVN 进行您想要的链接,因为这些链接实际上是内部 VisualStudio 结构,而不是您在 Unix 系统中找到的实际符号或硬链接。

我通常避免使用链接(我相信它们在 Windows 上被称为 Junctions),因为它们根本无法跨操作系统工作。相反,您可以使用以下方法之一:

  • 使用您的构建系统来复制文件,或创建所需的链接而不是您的版本控制系统。
  • 用于svn:externals进行链接。小心这一点,因为svn:externals是指向 Subversion URL 的指针。

例如,如果我设置http://foo.com/svn/trunk/proj1了一个svn:externals指向 的头部的链接http://foo.com/svn/trunk/proj2,并且我通过复制http://foo.com/svn/trunk/proj1到为项目 1 创建了一个标签http://foo.com/svn/tags/REL-1.2/proj1,那么该项目仍然指向 proj2 的主干的头部。Project 2 中的更改将改变我认为的稳定标签。始终将您svn:external指向稳定的修订版。

于 2012-12-24T17:23:13.083 回答
-2

我没有使用 VisualSVN 的经验,我们使用没有这个问题的 Ankhsvn。

http://ankhsvn.open.collab.net/

于 2012-12-21T15:49:08.433 回答