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