Subversion中查看哪些文件被锁定的最佳方法是什么?

40

我最近说服了我的团队从SourceSafe转向Subversion。不幸的是,我的经理仍然希望每个文件都使用独占锁。因此,我在每个文件上设置了svn:needs-lock属性,并创建了一个pre-commit hook来确保该属性保持不变。

我们正在Linux服务器上运行Subversion。我们大多数人使用Windows机器,少数人使用Mac。我们使用各种SVN客户端(TortoiseSVN、SmartSVN、Subclipse等)。

现在我们需要一个好的/易于使用的方法来查看整个存储库中当前锁定的所有文件(以及谁锁定了它们)。我已经在Tortoise和Subclipse中稍微尝试了一下,但没有找到我要找的内容。我们的项目有许多多级子目录,所以查看每个单独的目录将耗费太多时间。

我想要的是一个可以运行的单一报告,列出当前所有被锁定的内容及其所属人。如何获得这种类型的信息?


5
我知道你也知道这一点,但是这些锁在代码共享区域会成为生产力杀手。现在合并工具非常好用,合并更改比你的老板似乎认为的要容易。 - Tom Leys
1
@TomLeys 在源代码或任何可合并的文件类型方面,您可能是正确的。但并非总是如此,例如有时使用SVN来管理数据文件或办公文档,它们都没有易于访问、广泛使用的合并工具。 - peterh
如何在 SVN 上合并 Informatica 文件(存储为 XML)?我猜唯一的出路是使用 SVN 锁定,不是吗? - Tarmit
4个回答

34
您需要的是svnadmin lslocks命令。
我们在工作中将一些Word文档存储在Subversion仓库中(使用svn:needs-lock)。我设置了一个cron作业,每天检查锁定列表,并向整个团队发送所有超过7天未解锁的锁定副本的报告。这样我们就可以知道谁已经懈怠,长时间占用了文档的锁定副本。

1
Office 2003现在具有内置的Word文档合并功能。我不知道这个功能是什么时候引入的,但这可能意味着您不再需要锁定Word文档。 - Tom Leys
谢谢 Greg。作为后续,你能告诉我如何使列表仅显示 x 天前的锁定吗? - Shane
我刚编写了一个脚本,解析“svnadmin lslocks”输出的内容,查看每个锁创建日期,并计算从那时起经过了多少天。我的实际脚本在工作中,目前我无法访问它,但应该很容易弄清楚。 - Greg Hewgill

22
要查看您和其他人持有的锁定,请使用TortoiseSVN → 检查修改.... 本地持有的锁定标记会立即显示。要检查其他人持有的锁定(以及查看您的任何锁定是否被破坏或被盗),您需要单击“检查存储库”。

22

也许这不是您想要的答案,但您应该尝试说服经理,锁定实际上并不是最好的开发实践。已经有许多关于这个主题的文章写得很好,所以我在这里不会重复。

当您从一个强制执行检出锁的环境转移到没有此类限制的环境时,一开始您可能认为这会导致混乱,但实际上并不会。 SVN非常擅长在两个人同时编辑同一文件时合并更改,即使出现冲突,修复它们也不会太糟糕。

比起等待带着关键文件离开办公室或者更糟糕的是去度假的人归来,这样做好多了。


3
我正在尝试逐步进行。只是让团队脱离SourceSafe就很费力了。一旦他们熟悉了SVN,我打算解决排除独占锁定的问题。 - Shane
3
锁非常重要,尤其在处理二进制文件时,这些文件不容易合并或比较差异,比如微软 Office 文档。 - DanB

22
你可以使用 svn status --show-updates 命令来从本地检出中发现锁定文件,服务器上被锁定的所有文件前面都会加上一个 O。例如:
$ svn status --show-updates
     O      279532   LockedFile
?                    UncommittedFile
M           279532   ModifiedFile

查看svnbook获取更多细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接