外部修改过的文件

时间:2015-01-09 22:03:48

标签: svn svn-externals

我有一个沙箱,它在存储库中的目录与直接来自存储库的目录混合在一起。 svn status --ignore-externals将告诉我存储库中文件的状态。做相反的好方法是什么?

例如,如果我有

$ svn status
X foo
M bar/local.cpp

Performing status on external item at 'foo'
M foo/external.cpp

所以,忽略外部,我有

$ svn status --ignore-externals
X foo
M bar/local.cpp

我正在寻找像

这样的东西
$ svn status --ignore-local
X foo

Performing status on external item at 'foo'
M foo/external.cpp

仅列出外部存储库中的文件。

这可能最终会出现在shell或Perl脚本中,所以可以接受相当复杂的东西。

我知道我可以做svn status foo,但我的实际案例有十几个外部,而且这个数字随着时间的推移而逐渐增长。硬编码列表不是一个好的解决方案。

看起来我可以只查找字符串Performing status并忽略它之前的所有内容。 (我不关心X行。)这是我可以依赖的顺序吗?

编辑:为了澄清,我正在寻找外部存储库中已在我的沙箱中修改过的文件。我不在乎文件是否也在外部存储库中被修改过。

1 个答案:

答案 0 :(得分:0)

  1. " ...寻找字符串Performing status ..."在纯svn st
  2. 的情况下,为您提供有用
  3. 您必须阅读有关-u命令的svn status选项和svn propget命令才能在代码中对可变外部列表进行操作
  4. 工作副本中的样本(对于HEAD类型的外部),具有外部,在repo中更新以及WC中的本地修改

    纯净状态

    trunk>svn st
    ?       Core\core+.txt
    M       Core\core.txt
    X       Extensions\Mod1
    X       Extensions\Mod2
    
    Performing status on external item at 'Extensions\Mod1':
    
    Performing status on external item at 'Extensions\Mod2':
    

    存储库中的' Extensions \ Mod *`的 更改,但您错过了

    检查仓库的状态

    trunk>svn st -u
    ?                    Core\core+.txt
    M                4   Core\core.txt
    X                    Extensions\Mod1
    X                    Extensions\Mod2
    Status against revision:      5
    
    Performing status on external item at 'Extensions\Mod1':
            *            Extensions\Mod1\file3.txt
            *        4   Extensions\Mod1
    Status against revision:      5
    
    Performing status on external item at 'Extensions\Mod2':
            *        4   Extensions\Mod2\file1.txt
    Status against revision:      5
    

    获取所有外部

    相当复杂的情况:两个不同的挂载点,一个点的一组外部

    WC>svn pg svn:externals -R
    trunk\Core - ^/Vendor/Core+ Core+
    
    trunk\Extensions - ^/Vendor/Lib1 Mod1
    ^/Vendor/Lib2 Mod2
    ^/Vendor/Lib3 Mod3
    

    为了避免"嘈杂"输出(因为它将用于' Externsions \'节点 - 带有前导X的行)

    WC>svn st -u trunk/Extensions
    
        Status against revision:      7
        X                    trunk\Extensions\Mod1
        X                    trunk\Extensions\Mod2
        Status against revision:      7
    
        Performing status on external item at 'trunk\Extensions\Mod1':
                *            trunk\Extensions\Mod1\file3.txt
                *        4   trunk\Extensions\Mod1
        Status against revision:      7
    
        Performing status on external item at 'trunk\Extensions\Mod2':
                *        4   trunk\Extensions\Mod2\file1.txt
        Status against revision:      7
    

    您必须直接请求状态直接外部dir,您必须从pg输出,fe( trunk\Extensions - ^ / Vendor / Lib1组合的完整路径的 Mod1

    >svn st -u trunk\Extensions\Mod1
            *            trunk\Extensions\Mod1\file3.txt
            *        4   trunk\Extensions\Mod1
    Status against revision:      8
    

    以及"针对修订的状态"之前的任何输出表示现有的存储库端更改:对于未触及的外部输出将是

    >svn st -u trunk\Extensions\Mod3
    Status against revision:      8