Subversion:需要找出存储库中被忽略的内容

时间:2014-05-08 17:00:07

标签: svn mercurial

更大的图片:

我正在使用SVN代码库,并且我希望为本地版本控件提供本地Mercurial存储库。在创建Mercurial存储库时,我想知道SVN忽略了哪些文件被忽略(例如,创建的临时文件等)。

真正想要的是找到用于忽略的模式。因此,如果SVN被告知忽略* .sdf,我不想看到它忽略的所有sdf文件。我想看看* .sdf,以便我可以把它放在我的.hgignore文件中。

这可能吗?

感谢。

2 个答案:

答案 0 :(得分:2)

  1. 安装hgsubversion扩展
  2. 将SVN-repo克隆到Mercurial repo
  3. 使用hg svn genignore从树中的svn:ignore定义构建.hgignore
  4. 检查生成的文件的内容,修复可能的错误,不要忘记提交Mercurial

    样品

    如果我在树中有这样的存储库(坏和丑,但适合测试svn:ignore

    WC>svn pg svn:ignore -v -R
    Properties on '.':
      svn:ignore
        *.bak
        *.tmp
    
    Properties on '1':
      svn:ignore
        *.bak
        *.tmp
        *.dbg
        *.raw
    
    Properties on '1\2':
      svn:ignore
        *.bak
        *.tmp
        *.dbg
        *.raw
        *.1bg
    

    生成的.hgignore将是

    .hgignore
    syntax:glob
    *.bak
    *.tmp
    1/*.bak
    1/*.tmp
    1/*.dbg
    1/*.raw
    1/2/*.bak
    1/2/*.tmp
    1/2/*.dbg
    1/2/*.raw
    1/2/*.1bg
    
    显然,它可以而且必须进行优化和压缩。 Ñ

    注意

    如果在SVN 1.8+ svn:global-ignores中使用(首选且更具可读性)

    WC>svn pg svn:global-ignores -v -R
    Properties on '.':
      svn:global-ignores
        *.bak
        *.tmp
    
    Properties on '1':
      svn:global-ignores
        *.dbg
        *.raw
    
    Properties on '1\2':
      svn:global-ignores
        *.1bg
    

    当前的Mercurial | HGSubversion在genignore中不使用和忽略此属性

    注2

    至少Mercurial 2.11无法克隆本地(file:///)Subversion 1.8+存储库,它们必须由httpd或svnserve提供

答案 1 :(得分:0)

您可以递归调用目录结构中的svn propget svn:ignore

第一遍hacky解决方案(在bash中)类似于:

svn list -R | xargs -I{} svn propget svn:ignore {}

但是这个:

  1. 不显示忽略模式的目录
  2. 还会尝试获取文件的svn:ignore属性,这是没有意义的
  3. <强>更新

    一个更好的解决方案,但不如Lazy Badger的那样好:

    #!/usr/bin/python                                                                                                       
    
    import os
    import subprocess
    
    # Run command and store output in variable, splitting into a list on newlines                                           
    paths =  subprocess.check_output(['svn', 'list', '-R']).splitlines()
    
    for path in paths:
        # [-1] is Python notation for "the last character in the string", so...                                             
        # look for a trailing path separator to indicate a "directory"                                                      
        if path[-1] == os.sep:
            ignores = subprocess.check_output(['svn', 'propget', 'svn:ignore', path])
            if ignores:
                print path
                print ignores