代码之家  ›  专栏  ›  技术社区  ›  andyuk

如何忽略Subversion中的文件?

  •  589
  • andyuk  · 技术社区  · 17 年前

    如何忽略Subversion中的文件?

    另外,如何查找不受版本控制的文件?

    17 回复  |  直到 17 年前
        1
  •  690
  •   Zulan    9 年前

    (此答案已更新,以符合SVN 1.8和1.9的行为)

    您有两个问题:

    将文件标记为已忽略:

    我所说的“忽略的文件”是指即使是“未版本化”的文件也不会出现在列表中:您的SVN客户机将假装文件根本不存在于文件系统中。

    忽略的文件由“文件模式”指定。SVN的在线文档中解释了文件模式的语法和格式: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html “Subversion中的文件模式”。

    从1.8版(2013年6月)及更高版本开始,Subversion支持3种不同的指定文件模式的方法。下面是一个总结和示例:

    1-运行时配置区域- global-ignores 选项:

    • 这是一个 仅客户端 设置,所以 全局忽略 列表不会被其他用户共享,它适用于您在计算机上签出的所有回购。
    • 此设置在运行时配置区域文件中定义:
      • Windows(基于文件)- C:\Users\{you}\AppData\Roaming\Subversion\config
      • Windows(基于注册表)- Software\Tigris.org\Subversion\Config\Miscellany\global-ignores 在两者 HKLM HKCU .
      • Linux/UNIX ~/.subversion/config

    2 - svn:ignore 属性,该属性在目录(而不是文件)上设置:

    • 这存储在repo中,因此其他用户将拥有相同的忽略文件。类似于 .gitignore 作品。
    • 忽略 应用于目录,并且不是递归的或继承的。任何文件或 立即的 将排除与文件模式匹配的父目录的子目录。
    • 虽然SVN 1.8添加了“继承属性”的概念,但是 忽略 在非直接后代目录中忽略属性本身:

      cd ~/myRepoRoot                             # Open an existing repo.
      echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
      
      svn status                                  # Check to see if the file is ignored or not.
      > ?    ./ignoreThis.txt
      > 1 unversioned file                        # ...it is NOT currently ignored.
      
      svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
      svn status
      > 0 unversioned files                       # ...but now the file is ignored!
      
      cd subdirectory                             # now open a subdirectory.
      echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
      
      svn status
      > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
      > 1 unversioned file
      

      (文件) ./subdirectory/ignoreThis 不会被忽略,即使” ignoreThis.txt “应用于 . 再生根)。

    • 因此,要递归应用忽略列表,必须使用 svn propset svn:ignore <filePattern> . --recursive .

      • 这将在每个子目录上创建属性的副本。
      • 如果 <filePattern> 值在子目录中是不同的,那么子目录的值将完全覆盖父目录,因此没有“加法”效果。
      • 所以如果你改变 <文件格式; 根上 . ,那么你必须用 --recursive 在子目录和子目录上覆盖它。
    • 我注意到命令行语法是反直觉的。

      • 我开始假设您将通过键入类似 svn ignore pathToFileToIgnore.txt 然而,这不是SVN的忽略特性的工作方式。

    3 - svn:global-ignores 财产。需要SVN 1.8(2013年6月):

    • 这和 忽略 但它使用了SVN 1.8的“继承属性”功能。
    • 比较 忽略 ,文件模式将自动应用于每个子目录(不仅仅是直接子目录)。
      • 这意味着不需要设置 SVN:全局忽略 --递归 标志,因为继承的忽略文件模式会在继承时自动应用。
    • 运行与上一个示例中相同的一组命令,但使用 SVN:全局忽略 而是:

      cd ~/myRepoRoot                                    # Open an existing repo
      echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
      svn status                                         # Check to see if the file is ignored or not
      > ?    ./ignoreThis.txt
      > 1 unversioned file                               # ...it is NOT currently ignored
      
      svn propset svn:global-ignores "ignoreThis.txt" .
      svn status
      > 0 unversioned files                              # ...but now the file is ignored!
      
      cd subdirectory                                    # now open a subdirectory
      echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
      svn status
      > 0 unversioned files                              # the file is ignored here too!
      

    对于Tortoissesvn用户:

    这整个安排对我来说很混乱,因为Tortoissesvn的术语(在他们的Windows资源管理器菜单系统中使用)最初对我有误导性——我不确定忽略菜单的“递归添加”、“添加*”和“添加”选项的意义。我希望这篇文章能够解释忽略特性是如何与SVN特性联系在一起的。也就是说,我建议使用命令行设置被忽略的文件,这样您就可以了解它是如何工作的,而不是使用GUI,并且只有在您熟悉命令行之后才使用GUI来操作属性。

    列出忽略的文件:

    命令 svn status 将隐藏忽略的文件(即与rga匹配的文件 全局忽略 模式或匹配直接父目录的 忽略 模式或匹配任何取消或目录的 SVN:全局忽略 模式。

    使用 --no-ignore 选项查看列出的文件。被忽略的文件的状态为 I ,然后将输出管道输送到 grep 只显示以“i”开头的行。

    命令是:

    svn status --no-ignore | grep "^I"
    

    例如:

    svn status
    > ? foo                             # An unversioned file
    > M modifiedFile.txt                # A versioned file that has been modified
    
    svn status --no-ignore
    > ? foo                             # An unversioned file
    > I ignoreThis.txt                  # A file matching an svn:ignore pattern
    > M modifiedFile.txt                # A versioned file that has been modified
    
    svn status --no-ignore | grep "^I"
    > I ignoreThis.txt                  # A file matching an svn:ignore pattern
    

    塔达!

        2
  •  76
  •   icc97    8 年前

    使用以下命令创建不在版本控制文件下的列表。

    svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
    

    然后将文件编辑为 只留下你想忽略的文件 . 然后使用此选项忽略文件中列出的文件:

    svn propset svn:ignore -F ignoring.txt .
    

    注意行末的圆点。它告诉SVN正在当前目录上设置属性。

    删除文件:

    rm ignoring.txt
    

    最后提交,

    svn ci --message "ignoring some files"
    

    然后,您可以通过以下方式检查哪些文件被忽略:

    svn proplist -v
    
        3
  •  47
  •   Rory O'Kane Erce    12 年前

    如果您正在使用 TortoiseSVN ,右键单击文件,然后选择 Tortoissesvn/添加到忽略列表 . 这会将文件/通配符添加到 svn:ignore 财产。

    忽略 当您签入文件时将被选中,匹配的文件将被忽略。对于Visual Studio.NET项目,我有以下忽略列表:

    bin obj
    *.exe
    *.dll
    _ReSharper
    *.pdb
    *.suo
    

    您可以在上下文菜单中的 Tortoissesvn/属性 .

        4
  •  36
  •   Adrian Enriquez    7 年前

    您可以忽略类似的文件或目录 吉蒂格诺 . 只需创建要忽略的目录/文件列表的文本文件,并运行以下代码:

    svn propset svn:ignore -F ignorelist.txt .
    

    或者,如果不想使用文本文件,可以这样做:

    svn propset svn:ignore "first
     second
     third" .
    

    Source: Karsten's Blog - Set svn:ignore for multiple files from command line

        5
  •  21
  •   Peter Mortensen Pieter Jan Bonestroo    11 年前

    我找到了那篇文章 .svnignore Example for Java .

    示例:.svnignore for ruby on rails,

    /log
    
    /public/*.JPEG
    /public/*.jpeg
    /public/*.png
    /public/*.gif
    
    *.*~
    

    之后:

    svn propset svn:ignore -F .svnignore .
    

    .gitignore的示例。你可以用你的.svnignore

    https://github.com/github/gitignore

        6
  •  14
  •   Yorick    9 年前

    好像没人提到过…

    svn propedit svn:ignore .
    

    然后编辑文件的内容以指定要忽略的模式,退出编辑器,一切都完成了。

        7
  •  10
  •   Kenneth    15 年前

    使用propedit时,请确保没有任何尾随空格,因为这将导致文件从忽略列表中排除。

    如果在Linux上使用tab autocomplete创建文件以开始,则会自动插入这些文件:

    svn propset svn:ignore 'file1
    file2' .
    
        8
  •  8
  •   Jim    9 年前

    另一个解决方案是:

    svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
    

    或逐行

    svn st | awk '/^?/{print $2}' > svnignore.txt 
    svn propget svn:ignore >> svnignore.txt 
    svn propset svn:ignore -F svnignore.txt . 
    rm svnignore.txt
    

    它做什么:

    1. 从SVN获取状态文件
    2. 用保存所有文件 ? 到文件“svnignore.txt”
    3. 获取已忽略的文件并将其附加到文件“svnignore.txt”
    4. 告诉SVN忽略“svn ignore.txt”中的文件
    5. 删除文件
        9
  •  7
  •   bzlm    8 年前

    此外,如果您使用Tortoise SVN,则可以执行以下操作:

    1. 在上下文菜单中,选择“Tortoissesvn”,然后选择“属性”
    2. 在出现的窗口中,单击“新建”,然后单击“高级”
    3. 在“属性名”的对面出现的窗口中选择或键入“svn:ignore”,在“属性值”的对面键入所需的文件名或文件夹名或文件掩码(在我的情况下是“*/target”),单击“递归应用属性”
    4. 好啊。好啊。
    5. 提交
        10
  •  5
  •   bzlm    8 年前

    更易读的版本 bkbilly's answer:

    svn st | awk '/^?/{print $2}' > svnignore.txt
    svn propget svn:ignore >> svnignore.txt
    svn propset svn:ignore -F svnignore.txt .
    rm svnignore.txt
    

    它做什么:

    1. 从SVN获取状态文件
    2. 用保存所有文件 ? 到文件“svnignore.txt”
    3. 获取已忽略的文件并将其附加到文件“svnignore.txt”
    4. 告诉SVN忽略“svn ignore.txt”中的文件
    5. 删除文件
        11
  •  4
  •   范陆离    9 年前
    1. cd~/.subversion
    2. 打开配置
    3. 查找类似“global ignores”的行
    4. 按如下方式设置忽略文件类型:global ignores=*.o*.lo*.la*.al.libs*.so 所以,[0-9] *Pyc*Pyo 88* ~* #.swp.ds存储节点输出
        12
  •  3
  •   petr k.    17 年前

    您还可以在SVN的配置文件中设置全局忽略模式。

        13
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    11 年前

    svn status 将告诉您哪些文件不在SVN中,以及更改了什么。

    看看 SVN properties 对于ignore属性。

    对于所有事情,SVN, Red Book 需要阅读。

        14
  •  3
  •   nbro kai    10 年前

    Adding a directory to subversion, and ignoring the directory contents

    svn propset svn:ignore '\*.*' .
    

    svn propset svn:ignore '*' .
    
        15
  •  3
  •   Slack    8 年前

    视觉神经网络 ignore 在Tortoissesvn中易于管理。打开Tortoissesvn,右键单击“文件”菜单,然后选择“添加到忽略列表”。

    这会将文件添加到 svn:ignore 财产。 当我们签入文件时,那些与 忽略 这将被忽略并且不会提交。

    在Visual Studio项目中,我们添加了以下要忽略的文件:

    bin obj
    *.exe
    *.dll
    *.pdb
    *.suo
    

    我们正在的SVN上管理源代码 Comparetrap 成功使用此方法

        16
  •  2
  •   Andreas Holstenson    17 年前

    使用命令 支持向量机状态 在显示文件状态的工作副本上,尚未受版本控制(且未被忽略)的文件旁边将有一个问号。

    至于忽略需要编辑svn:ignore属性的文件,请阅读“忽略svnbook中未版本化的项”一章 http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html . 本书还详细介绍了如何使用SVN状态。

        17
  •  0
  •   G. Googol    8 年前
    1. 打开你使用的JetBrains产品(即Pycharm)
    2. 然后单击顶部工具栏上的“提交”按钮或使用快捷方式“ctrl+k” screenshot_toolbar
    3. 在提交界面上,将不需要的文件移动到另一个更改列表中,如下所示。 screenshot_commit_change
    4. 下次只能提交默认更改列表。