如何确定谁使用SVN锁定了文件?

如何确定谁使用SVN锁定了文件?,svn,tortoisesvn,Svn,Tortoisesvn,我们使用的是SVNServer1.4(我想),客户端可以是命令行客户端,也可以是TortoiseSVN。查看“发现锁”一节。我相信它包含了答案。命令行客户端使用命令“svn info”显示锁所有者 在OrtoiseSVN中,您可以在“属性”上下文菜单(选项卡“subversion”)中看到锁所有者。使用OrtoiseSVN的repo浏览器功能,有一个锁列显示锁定文件的用户 右键单击本地工作副本->TortoiseSVN->repo浏览器。使用svn status--show updates查找文

我们使用的是SVNServer1.4(我想),客户端可以是命令行客户端,也可以是TortoiseSVN。

查看“发现锁”一节。我相信它包含了答案。

命令行客户端使用命令“svn info”显示锁所有者


在OrtoiseSVN中,您可以在“属性”上下文菜单(选项卡“subversion”)中看到锁所有者。

使用OrtoiseSVN的repo浏览器功能,有一个锁列显示锁定文件的用户

右键单击本地工作副本->TortoiseSVN->repo浏览器。

使用
svn status--show updates
查找文件锁定。在下面的示例中,Sally发现raisin.jpg上有一个锁

$ whoami
sally

$ svn status --show-updates
M              23   bar.c
M    O         32   raisin.jpg
       *       72   foo.h
Status against revision:     105
一旦知道了锁,就可以使用
svn-info
来发现谁设置了锁。请注意下面的“锁所有者”:


以下Python脚本显示了所有锁及其所有者:

#!/usr/bin/python
# coding=UTF-8

# This tool shows who owns the locks in a subversion repository

import sys
import subprocess

if len(sys.argv) > 1:
    p = subprocess.Popen(['svn', 'status', '-u', sys.argv[1]], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
else:
    p = subprocess.Popen(['svn', 'status', '-u'], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

(so, se) = p.communicate() # start command

lines = [x[21:].strip() for x in so.split('\n') if len(x) > 5 and x[5] == 'K']

for line in lines:
    p = subprocess.Popen(['svn', 'info', line], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (so, se) = p.communicate()
    details = [x[12:].strip() for x in so.split('\n') if x.startswith('Lock Owner')][0]
    print '[%s] (%s)' % (details, line)
检查步骤:

  • 右键单击要确定锁定的文件/文件夹

  • 转到TortoiseSVN选项>>回购浏览器

  • 将打开一个新窗口,您将获得一个表视图

  • 表中的Lock列将显示谁拥有锁

  • 右键单击文件,选择OrtoiseSVN,然后检查修改
  • 单击检查存储库
  • 向右滚动可查看“锁定”列

  • 我也有这个关于.aux文件的问题。 在我的例子中,解决方案/问题是不允许任何深度大于1的子目录。如果要使用此选项,tmp文件夹中的子目录必须存在。 例如 -->src-->简介-->简介.tex 要求 -->tmp-->简介-->简介.aux ******

    带下划线的目录必须存在。
    因此,在subversion管理的情况下,还要提交tmp文件夹中的目录结构(不带*.aux)文件。

    这似乎不适用于更高版本的subversion(例如1.7)。当我运行svn info时,我不会得到关于锁所有者的任何信息。我的解决方案(这并不理想)是运行“svn status-u--xml filename”并解析生成的xml。请注意,您需要向
    svn info
    传递URL,而不是本地路径,以获取最新的锁定信息。re:
    需要传递URL…
    幸运的是,只需使用本地路径即可告诉您完整的URL。复制/粘贴一点。。。中提琴!遗憾的是,当我查看属性/subversion页面时,TortoiseSVN告诉我没有锁。但告诉我,当我尝试提交文件时,它已锁定在其他位置。但我不会告诉我锁在哪里。PS:我只(故意)锁定过一个Windows目录。我希望找到意外锁定发生的地方。@JesseChisholm:我不认为Subversion记录了发送锁定的工作副本。无论如何,如果你确定没有未完成的更改,你可以打破锁。最终,我必须去每台有SVN沙箱的机器,检查是否在那里创建了意外锁
    SVN status--show updates
    ,直到我找到了有意外锁的机器。然后我可以释放锁
    svn unlock officingfile
    并清除该情况。@JesseChisholm:您可以在不知道锁是在哪里创建的情况下打破锁;看见但是,不要这样做,因为其他人正在处理这个文件。这是乌龟告诉我的。锁所有者:锁创建日期:锁定(需要清除):否。尽管如此,当我尝试删除文件并提交时,它会抱怨文件被锁定在另一个工作副本中。最佳答案。谢谢普拉德尼亚和戈德史密斯。
    #!/usr/bin/python
    # coding=UTF-8
    
    # This tool shows who owns the locks in a subversion repository
    
    import sys
    import subprocess
    
    if len(sys.argv) > 1:
        p = subprocess.Popen(['svn', 'status', '-u', sys.argv[1]], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    else:
        p = subprocess.Popen(['svn', 'status', '-u'], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    (so, se) = p.communicate() # start command
    
    lines = [x[21:].strip() for x in so.split('\n') if len(x) > 5 and x[5] == 'K']
    
    for line in lines:
        p = subprocess.Popen(['svn', 'info', line], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        (so, se) = p.communicate()
        details = [x[12:].strip() for x in so.split('\n') if x.startswith('Lock Owner')][0]
        print '[%s] (%s)' % (details, line)