如何为SVN存储库设置只读文件系统镜像?

我有一个SVN存储库,位于Windowsnetworking驱动器上(通过file url访问)。 我的一些同事不能也不会使用SVN,所以我需要维护另一个目录中的存储库中所有内容的只读镜像。

我没有看到任何简单的方法来做到这一点。 我不能把它作为一个工作副本,因为它咀嚼了太多的networking空间。 svn export将不会删除从存储库中删除的文件。 我试图创build一个钩子脚本来复制文件,当他们签入时,但我不能保证SVN可执行文件的path将是相同的每个客户端。

我只是简单地有一个手动运行的脚本,它将存储库中的每个文件与networking上的文件进行比较,如果存在不匹配,则删除或复制它,但似乎无法从文件中获取文件的大小这意味着我将不得不完全依赖于文件的更新date – 我不愿意这样做。

什么是最好的方式来设置?

他们不会使用SVN? 老实说,我会尽我所能把它放在喉咙(如果可能的话,任何最终用户都可以使用TortoiseSVN进行最less的重新培训)。 你没有理由不得不绕过他们的懒惰。

据我所知,至less有两种方法来破解它 –

  • 创build单独的工作副本并手动pipe理每个SVN

实际上我的工作地点也有同样的问题,老板告诉我,我们不能强迫他们使用它。 相反,我们为需要访问代码的每个开发人员/组创build一个networking共享,然后根据请求手动svn up / svn commit

  • 有一个“主”工作副本,并分发SMB / FTP / NFS访问

我们和另一个团队有一个糟糕的设置 – 他们不想使用SVN,所以我们只给了他们原始的Samba访问生产机器来修补文件。 然后,每天晚上一个cron工作都会经过并添加所有新的文件并提交给repo。 由于只有一个工作副本,所以没有任何冲突。 老实说,除了让我在晚上睡得更健康之外,没什么用处。

他们都是这样做的绝对愚蠢的方式 – 第一个需要手冲突解决(由你,或你的团队成员),另一个实际上没有优势的磁盘备份。 恕我直言,唯一真正的解决scheme是教你的最终用户不仅如何使用SVN,但为什么他们应该使用它。 这样他们可以对自己的工作负责,让你去处理真正的问题。

从现有的工作副本做一个ROBOCOPY / MIR?

也许你可以使用webdav呢? 更多信息: webdav autoversioning请务必阅读警告等。

(但我同意“强迫他们使用它”的答案。)

尝试使用SVN ::通知::镜像

http://search.cpan.org/~jpeacock/SVN-Notify-Mirror-0.038/lib/SVN/Notify/Mirror.pm

这是一个perl模块,但你通过标准的SVN钩子系统挂钩它(文档有例子)。

这将在本地保存存储库或其一部分的签出副本,但可以使用rsync将其推送到另一个系统。 只要你获得你的权限,这将是你的只读的最新副本供人们参考。

我用VisualSVN Server和龟做了一些testing

如果我把这个命令放在Post-Commit挂钩中,我所做的任何更改都会被发送到c:\ data \ folder_to_share_readonly文件夹中。

“svn_executable_path \ svn”update c:\ data \ folder_to_share_readonly –quiet –non-interactive –username myUser –password myPwd