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

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

我有一个 SVN 存储库,位于 Windows 网络驱动器上(可通过 URL 访问file)。我的许多同事不能也不会使用 SVN,因此我需要在另一个目录中维护存储库中所有内容的只读镜像。

我看不出有什么简单的方法可以做到这一点。我无法将其作为工作副本,因为这会占用太多的网络空间。 svn export不会删除从存储库中删除的文件。我试图创建一个钩子脚本来在文件签入时复制文件,但我不能保证 SVN 可执行文件的路径对于每个客户端都是相同的。

我本来打算简单地编写一个手动运行的脚本,将存储库中的每个文件与网络上的文件进行比较,如果不匹配则删除或复制它,但我似乎无法从存储库中获取文件的大小,这意味着我必须完全依赖报告的文件更改日期——我很不愿意这样做。

完成此项设置的最佳方法是什么?

答案1

他们惯于使用 SVN?老实说,如果可能的话,我会尽我所能让他们接受(任何最终用户都可以通过最少的重新培训来使用 TortoiseSVN)。你没理由非要利用他们的懒惰。

据我所知,至少有两种方法可以破解它——

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

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

  • 拥有一个“主”工作副本并向其分发 SMB/FTP/NFS 访问权限

我们与另一个团队的设置很糟糕——他们不想使用 SVN,所以我们只给他们原始的 Samba 访问权限来修改生产机器的文件。然后,每天晚上,cron 作业都会执行并添加所有新文件并将其提交到存储库。由于只有一个工作副本,所以永远不会发生任何冲突。老实说,除了让我晚上睡得更香之外,它没有什么用处。

这两种方法都非常愚蠢——第一种方法需要手动解决冲突(由你或你的团队成员解决),而第二种方法与磁盘备份相比几乎没有任何优势。在我看来,唯一的真实的解决方案是教会你的最终用户如何使用 SVN,但是为什么他们应该使用它。这样他们就可以对自己的工作负责,而你来处理真正的问题。

答案2

从现有工作副本创建 ROBOCOPY /MIR?

答案3

也许你可以使用 webdav 来实现这一点?更多信息请见:webdav 自动版本控制 请务必仔细阅读警告等。

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

答案4

我已经使用 VisualSVN Server 和 Tortoise 进行了一些测试

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

“svn_executable_path\svn”更新 c:\data\folder_to_share_readonly --quiet --non-interactive --用户名 myUser --密码 myPwd

相关内容