是否可以设置 SVN 以仅在特定操作系统上检出特定文件?

Is it possible to set up SVN to check out certain files only on certain operating systems?

我有一位客户向我们提供了一些数据文件。客户主要在 Linux 上工作,有些文件名只是大小写不同 (upper/lower),例如R40r40 在同一文件夹中。我已经通过 Linux 机器将它们添加到我的存储库中,但是现在当我在 Windows 上使用存储库时,它说有几个文件丢失了,因为 Windows 是文件名不区分大小写,文件夹中不能同时有R40r40。这会阻止我执行某些 SVN 操作,例如开始合并。显然,我不能只更改他们的文件名而让他们的软件仍然工作,但我们在处理 Windows.

时不需要这些文件

有没有办法解决这个问题,同时仍然将客户的文件保存在存储库中以供 Linux 结帐?为了方便起见,我们只是希望它们在存储库中。

没有。我不知道有什么选项或 属性 可以直接用 subversion 解决这个问题。 (列出了可能的属性 here

一种可能的解决方法是 "Client Side Hooks"。 (这 不是 Subversion 本身的集中操作,您需要访问这些客户端 windows 机器中的每一个)

如果您在 Windows 上使用 TortoiseSVN 客户端,您可以安装一个客户端挂钩并在此脚本中执行您想要的 "whatever"。但请记住在每台 windows 机器上分别设置客户端挂钩。

有关使用 TortoiseSVN 的客户端挂钩的更多详细信息,请参阅 TortoiseSVN (in the Chapter Client Side Hook Scripts) 的文档。

如果 Windows 客户端可以忽略整个目录而不是目录中的特定文件,您可以使用 svn:externals property.

在存储库上创建一个 Windows 特定视图

假设您的存储库如下所示:

/trunk/linux_and_windows_dir_1
/trunk/linux_only_dir_1
/trunk/linux_and_windows_dir_2
/trunk/linux_only_dir_2
...

您可以创建以下 OS 个特定中继:

/linux_trunk 
  svn:externals = 
    /trunk/linux_and_windows_dir_1
    /trunk/linux_only_dir_1
    /trunk/linux_and_windows_dir_2
    /trunk/linux_only_dir_2

/windows_trunk 
  svn:externals = 
    /trunk/linux_and_windows_dir_1
    /trunk/linux_and_windows_dir_2

然后让 Lunux 用户签出并使用 linux_trunk。 Windows 用户会结账 windows_trunk。由于两个 OS 特定的中继只包含外部定义,所以签入它们的任何内容都将自动签入 /trunk。

如果 windows 用户将更改签入 /windows_trunk/linux_and_windows_dir_1 那么该更改也将应用于 /trunk/linux_and_windows_dir_1 并且 /linux_trunk/linux_and_windows_dir_1.

正如我所说,只有当您使用目录而不是单个文件指定复制的 Windows 特定部分时,这才有效。