gpt4 book ai didi

svn - 如何忽略 Subversion 中的文件?

转载 作者:行者123 更新时间:2023-12-03 03:53:42 25 4
gpt4 key购买 nike

如何忽略 Subversion 中的文件?

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

最佳答案

(此答案已更新以匹配 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选项:

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

  • 2 - svn:ignore属性,在目录(不是文件)上设置:
  • 这存储在 repo 中,因此其他用户将拥有相同的忽略文件。类似于 .gitignore作品。
  • svn:ignore应用于目录并且是非递归的或继承的。将排除与文件模式匹配的任何文件或父目录的直接子目录。
  • 虽然 SVN 1.8 添加了“继承属性”的概念,但 svn:ignore属性本身在非直接后代目录中被忽略:
    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>如果子目录中的值不同,则子目录的值会完全覆盖父目录,因此没有“相加”效果。
  • 因此,如果您更改 <filePattern>在根上 . ,那么你必须用 --recursive 改变它在子目录和后代目录上覆盖它。
  • 我注意到命令行语法是违反直觉的。
  • 我开始假设您会通过键入类似 svn ignore pathToFileToIgnore.txt 的内容来忽略 SVN 中的文件。然而,这不是 SVN 的忽略功能的工作方式。

  • 3- svn:global-ignores属性(property)。需要 SVN 1.8(2013 年 6 月):
  • 这类似于 svn:ignore ,除了它利用了 SVN 1.8 的“继承属性”功能。
  • 比较 svn:ignore ,文件模式会自动应用于每个后代目录(不仅仅是直接子目录)。
  • 这意味着不需要设置 svn:global-ignores--recursive标志,因为继承的忽略文件模式会在继承时自动应用。
  • 运行与上一个示例相同的一组命令,但使用 svn:global-ignores反而:
    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!

  • 对于 TortoiseSVN 用户:

    整个安排让我感到困惑,因为 TortoiseSVN 的术语(在他们的 Windows 资源管理器菜单系统中使用)最初误导了我 - 我不确定忽略菜单的“递归添加”、“添加 *”和“添加”的意义是什么选项。我希望这篇文章解释了忽略功能如何与 SVN 属性功能相关联。也就是说,我建议使用命令行来设置忽略的文件,以便您了解它的工作原理,而不是使用 GUI,并且只有在您熟悉命令行后才使用 GUI 来操作属性。

    列出被忽略的文件:

    命令 svn status将隐藏被忽略的文件(即,匹配 RGA global-ignores 模式,或匹配直接父目录的 svn:ignore 模式或匹配任何祖先目录的 svn:global-ignores 模式的文件。

    使用 --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

    达达!

    关于svn - 如何忽略 Subversion 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/86049/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com