Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN:仅在目录上设置属性_Svn_Properties_Tree_Tortoisesvn_Svn Checkout - Fatal编程技术网

SVN:仅在目录上设置属性

SVN:仅在目录上设置属性,svn,properties,tree,tortoisesvn,svn-checkout,Svn,Properties,Tree,Tortoisesvn,Svn Checkout,在SVN中,是否有任何方法可以在树中的所有目录上设置(bugtraq)属性而不签出整个树 如果不设置挂钩,我无法直接在存储库中设置属性。即使我可以,我也不确定这是否会有帮助——你不能用Tortoise设置递归属性,而且我怀疑用命令行客户端也不会很简单 有稀疏的签出-但是如果我为每个目录设置深度为空,那么递归地设置属性将不起作用,即使我手动签出每个子目录 我可以检查整个存储库,并使用Tortoise递归地设置目录上的bugtraq属性(默认情况下,它们不会应用于文件)。但这就需要我检查整个存储库

在SVN中,是否有任何方法可以在树中的所有目录上设置(bugtraq)属性而不签出整个树

如果不设置挂钩,我无法直接在存储库中设置属性。即使我可以,我也不确定这是否会有帮助——你不能用Tortoise设置递归属性,而且我怀疑用命令行客户端也不会很简单

有稀疏的签出-但是如果我为每个目录设置深度为空,那么递归地设置属性将不起作用,即使我手动签出每个子目录

我可以检查整个存储库,并使用Tortoise递归地设置目录上的bugtraq属性(默认情况下,它们不会应用于文件)。但这就需要我检查整个存储库

有没有比这更好的方法让我错过了呢?

编辑:


我尝试签出整个存储库并在根目录下更改属性,但提交违反了我们的预提交挂钩:无法更改标记上的属性。在不删除钩子的情况下,看起来我需要手动更改属性(除了标记之外的所有内容)。

获取所有目录的列表可能是一个很好的第一步。这里有一种方法可以做到这一点,而无需实际检查任何内容:

  • 创建包含存储库内容的文本文件:

    svn列表--深度无限>everything.txt

  • 将其精简为目录。所有目录都将以正斜杠结尾:

    grep“/$”everything.txt>just_directories.txt

  • 在您的情况下,您需要在文本编辑器中打开它,并取出钩子阻塞的标记目录

    由于已签出存储库,因此可以直接将该文件用作propset操作的输入:

    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允许您通过存储库浏览器在存储库中的目录上设置属性,而无需将其签出。但一次只能执行一个目录。