SVN:仅在目录上设置属性
在SVN中,是否有任何方法可以在树中的所有目录上设置(bugtraq)属性而不签出整个树 如果不设置挂钩,我无法直接在存储库中设置属性。即使我可以,我也不确定这是否会有帮助——你不能用Tortoise设置递归属性,而且我怀疑用命令行客户端也不会很简单 有稀疏的签出-但是如果我为每个目录设置深度为空,那么递归地设置属性将不起作用,即使我手动签出每个子目录 我可以检查整个存储库,并使用Tortoise递归地设置目录上的bugtraq属性(默认情况下,它们不会应用于文件)。但这就需要我检查整个存储库 有没有比这更好的方法让我错过了呢? 编辑:SVN:仅在目录上设置属性,svn,properties,tree,tortoisesvn,svn-checkout,Svn,Properties,Tree,Tortoisesvn,Svn Checkout,在SVN中,是否有任何方法可以在树中的所有目录上设置(bugtraq)属性而不签出整个树 如果不设置挂钩,我无法直接在存储库中设置属性。即使我可以,我也不确定这是否会有帮助——你不能用Tortoise设置递归属性,而且我怀疑用命令行客户端也不会很简单 有稀疏的签出-但是如果我为每个目录设置深度为空,那么递归地设置属性将不起作用,即使我手动签出每个子目录 我可以检查整个存储库,并使用Tortoise递归地设置目录上的bugtraq属性(默认情况下,它们不会应用于文件)。但这就需要我检查整个存储库
我尝试签出整个存储库并在根目录下更改属性,但提交违反了我们的预提交挂钩:无法更改标记上的属性。在不删除钩子的情况下,看起来我需要手动更改属性(除了标记之外的所有内容)。获取所有目录的列表可能是一个很好的第一步。这里有一种方法可以做到这一点,而无需实际检查任何内容:
svn propset myprop myvalue --targets just_directories.txt
我想直接在文件的存储库版本上设置属性,而不首先签出它们,但没有成功。我用存储库路径()在每个目录名前面加上前缀,并尝试使用svn-propset-myprop-mypropvalue--targets just_directories.txt,但出现错误:svn:在非本地目标“”上设置属性需要基本修订。不确定是否有办法解决这个问题。我最后用pysvn绑定(非常容易使用)编写了一个脚本。它在下面,以防有人想要它
import sys
import os
from optparse import OptionParser
import pysvn
import re
usage = """%prog [path] property-name property-value
Set property-name to property-value on all non-tag subdirectories in an svn working copy.
path is an optional argument and defaults to "."
"""
class Usage(Exception):
def __init__(self, msg):
self.msg = msg
def main():
try:
parser = OptionParser(usage)
(options, args) = parser.parse_args()
if len(args) < 2:
raise Usage("Must specify property-name and property-value")
elif len(args) == 2:
directory = "."
property_name = args[0]
property_value = args[1]
elif len(args) == 3:
directory = args[0]
property_name = args[1]
property_value = args[2]
elif len(args) > 3:
raise Usage("Too many arguments specified")
print "Setting property %s to %s for non-tag subdirectories of %s" % (property_name, property_value, directory)
client = pysvn.Client()
for path_info in client.info2(directory):
path = path_info[0]
if path_info[1]["kind"] != pysvn.node_kind.dir:
#print "Ignoring file directory: %s" % path
continue
remote_path = path_info[1]["URL"]
if not re.search('(?i)(\/tags$)|(\/tags\/)', remote_path):
print "%s" % path
client.propset(property_name, property_value, path, depth=pysvn.depth.empty)
else:
print "Ignoring tag directory: %s" % path
except Usage, err:
parser.error(err.msg)
return 2
if __name__ == "__main__":
sys.exit(main())
导入系统
导入操作系统
从optpasse导入OptionParser
导入pysvn
进口稀土
用法=”“%prog[path]属性名称属性值
在svn工作副本中的所有非标记子目录上将property name设置为property value。
path是可选参数,默认为“”
"""
类用法(例外):
定义初始化(self,msg):
self.msg=msg
def main():
尝试:
parser=OptionParser(用法)
(options,args)=parser.parse_args()
如果len(args)<2:
提高使用率(“必须指定属性名称和属性值”)
elif len(args)=2:
directory=“”
属性\u name=args[0]
属性值=args[1]
elif len(args)=3:
目录=args[0]
属性\u name=args[1]
属性值=args[2]
elif len(args)>3:
raise用法(“指定的参数太多”)
打印“为%s的非标记子目录将属性%s设置为%s”%(属性名称、属性值、目录)
client=pysvn.client()
对于client.info2(目录)中的路径_信息:
路径=路径信息[0]
如果路径信息[1][“种类”]!=pysvn.node_kind.dir:
#打印“忽略文件目录:%s”%path
持续
远程路径=路径信息[1][“URL”]
如果没有重新搜索('(?i)(\/tags$)|(\/tags\/)',远程路径):
打印“%s”路径
propset(属性名称、属性值、路径、深度=pysvn.depth.empty)
其他:
打印“忽略标记目录:%s”%path
除用法外,错误:
parser.error(err.msg)
返回2
如果名称=“\uuuuu main\uuuuuuuu”:
sys.exit(main())
刚找到这个,也许使用ls会有所帮助。“需要基本修订”消息是因为你不能在存储库上设置版本属性,只能在工作副本上设置。看起来原始海报在没有查看完整树的情况下无法完成他想做的事情。顺便说一句,tortoise允许您通过存储库浏览器在存储库中的目录上设置属性,而无需将其签出。但一次只能执行一个目录。