【问题标题】:SVN: Ignore some directories recursivelySVN:递归地忽略一些目录
【发布时间】:2011-01-03 08:50:16
【问题描述】:

我不希望任何名为 builddist 的目录进入我的 SVN,无论它在树中有多深。

这可能吗?在git中我只是放了

build
dist

在我的.gitignore 中,它会递归地忽略。我如何用 svn 做到这一点?请不要告诉我在每个父目录上做一个 propset...

【问题讨论】:

  • 如果您使用的是 Subversion 1.8,请检查 this answer 以获取本机解决方案。

标签: svn version-control ignore


【解决方案1】:

从 subversion 1.8 开始,现在有 svn:global-ignores 属性,其工作方式类似于 svn:ignore,但可以递归(所以在您的顶级目录中设置它)

【讨论】:

  • 我有点困惑 - ~/.subversion/config 文件中有 global-ignores,但也有 inheritable svn:global-ignores 属性设置在 SVN 存储库的目录中,以及svn:ignore - 您能否提供这些不同选项的摘要以及它们的比较方式? --recursive 标志对它们也有什么影响?
  • 我已经完成了自己的研究并在这个 QA 答案中发表了我的发现:stackoverflow.com/a/86052/159145
  • [我试过了,失败了,obj文件夹还是出现了](stackoverflow.com/questions/50960188/…),你能帮我看看吗?
  • 我可以说“build/*”去忽略每个构建文件夹中构建下面的所有内容吗?
【解决方案2】:

svn propset--recursive 作为一个选项,因此您可以这样做,但有两个缺点:

  1. 您必须检查整个存储库(或至少其中的所有目录),并且
  2. 您必须记住在添加新目录时设置svn:ignore 属性

【讨论】:

    【解决方案3】:

    这是不可能的。 Subversion 中只有两种忽略机制,svn:ignore(非递归)和global-ignores(不特定于存储库)。

    【讨论】:

    • svn propset --recursive svn:ignore svn_ignore_rules 。其中 svn_ignore_rules 是一个包含忽略规则的文件——每行一个
    • 'svn propset --recursive svn:ignore --file svn_ignore_rules 。对我来说使用 svn-1.7.6,否则你会递归地忽略名为 'svn_ignore_rules' 的文件 [编辑:根据下面评论中的 'wytten']
    • 致评论者:正如提问者所说,“请不要告诉我在每个父目录上做一个 propset...”。
    • 现在可以在 Subversion 1.8 中使用
    【解决方案4】:

    这对我有用:

     svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>
    

    【讨论】:

    • 谢谢你,效果很好...顺便说一句,我发现忽略 *.txt 和 *.pdf 的唯一方法是将这些模式放在一个文件中,然后使用 'svn propset --file' 选项
    【解决方案5】:

    添加到您的 ~/.subversion/config 或 /etc/subversion/config 文件中:

    [miscellany]
    global-ignores = build dist
    

    【讨论】:

    • 如果可以的话,我宁愿在每个仓库都这样做
    • 嗯不确定是否有一种简单的方法可以在每个 repo 中执行此操作,预提交挂钩可能会拒绝某些模式,但这不是一个完整的解决方案。 svn:ignore 在每个父目录上都有效,但不是递归的。在处理不同的存储库时,您可以用脚本替换您的配置文件,但这是一个额外的步骤。
    • build dist是什么意思?
    【解决方案6】:

    可以通过从版本控制中删除目录来忽略 build 和 dist 目录。诀窍是使用 --keep-local 选项将目录保留在工作副本中。例如:

    svn rm dist --keep-local
    svn ci -m'removed build directory from version control'
    

    该目录将不再被 subversion 跟踪,但它仍会在您的工作副本中保存编译器输出等。

    干杯, 乔

    【讨论】:

      【解决方案7】:

      例如文件夹结构:

      Project/
      Project/dist/
      
      cd Project
      svn propset svn:ignore '*' dist/
      svn ci -m "content of dist ignored"
      

      最好在ignore命令之前对dist内容进行svn删除,这样对于分支dist就会为空。

      为我工作,今天测试。 Here is the page explaining it a bit

      【讨论】:

        【解决方案8】:

        为了忽略所有存储库中的所有此类文件,您可以将global-ignores 添加到每个用户的配置文件中。

        在类 Unix 系统上,这个区域 显示为一个名为的目录 .subversion 在用户家中 目录。在 Win32 系统上, Subversion 创建一个名为 颠覆,通常在 用户的应用程序数据区域 个人资料目录

        Configuration Options

        不幸的是,没有针对每个存储库的选项来执行此操作。它基本上是每个用户或每个目录的,所以多个 svn:ignores 可能是要走的路,尽可能烦人。

        【讨论】:

        • 如果可以的话,我宁愿在每个仓库都这样做
        • 哦,那你倒霉了。正如@Kevin Reid 所说——你有每个目录或每个用户。
        【解决方案9】:

        您首先必须移动到工作副本的顶部文件夹并在那里创建一个文件(例如 .svnignore),您应该在其中放置所有要忽略的模式,例如(对于 Android 项目):

        bin
        gen
        proguard
        .classpath
        .project
        local.properties
        Thumbs.db
        *.apk
        *.ap_
        *.class
        *.dex
        

        然后你运行以下命令(记住你必须在你的工作副本的顶层文件夹):

        svn propset svn:ignore -R -F .svnignore .
        

        这仅适用于尚未受版本控制的文件夹和文件。如果您希望正在被版本控制的文件夹(或文件)也开始被忽略,请通过运行以下命令将其从版本控制中删除:

        svn rm --keep-local <path>
        

        从这篇解释了这一切的精彩文章中得到了这一切:http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

        【讨论】:

        • 这非常有帮助。这是我发现在 svn 中获得类似 git 的忽略行为的最佳方法。非常感谢。
        【解决方案10】:

        在 subversion 1.8 以上,可以为当前存储库设置 global-ignores。

        svn propset svn:global-ignores build .
        svn propset svn:global-ignores dist .
        

        您也可以创建一个名为.svnignore 的文件夹,并写入条件。

        build
        dist
        

        记住每行一个条件,设置 build/* 或 dist/debug 是徒劳的。 然后执行命令:

        svn propset svn:global-ignores -F .svnignore .
        

        【讨论】:

        • 完美运行!只需在新签出的 repo 上运行第一个命令。
        【解决方案11】:

        创建一个文件并将您的忽略添加到其中

        ingore 列表:

        file1 
        directory1
        file2
        etc...
        

        然后应用以下命令

        for n in directory; do svn propset svn:ignore -F ignore-list $n; done
        

        directory 是您的目录名称,您也可以对目录/子目录进行子分类。或者使用 * 来记下您所在的当前目录。

        这是假设你使用 bash 作为你的 shell

        【讨论】:

        • 这里的 $n 是什么?
        • @igor Ganapolsky - $n 是 for 循环的变量。它将被设置为您正在循环进入的序列的索引;在这种情况下,上例中的“目录”指定的目录。
        【解决方案12】:
        svn propset --recursive svn:ignore svn_ignore_rules .
        

        其中 svn_ignore_rules 是一个包含忽略规则的文件——每行一个

        当然,每次向仓库添加新目录时都必须重新运行它

        svn_ignore_rules 也可以被认为是签入到 repo 中,以供其他具有 repo 写访问权限的用户重复使用

        【讨论】:

          【解决方案13】:
          cd parent_dir #包含要递归忽略的文件夹的目录 svn propedit svn:ignore 。 #将打开svn-prop.tmp 登记文件夹 ^X 是 commit -m '忽略目标直接'

          【讨论】:

          • 帮助了我,我在设置文件夹模式时遇到了问题,SVN 正在编译不在 repo 中的文件夹,set EDITOR=notepadsvn propedit svn:ignore .运作良好...
          【解决方案14】:

          一种方法是向 pre-commit 或 post-commit 挂钩添加某种检查,但如果您不拥有 repo 服务器,请直接注意。

          【讨论】:

            【解决方案15】:

            由于这个可能常见的问题似乎没有解决方案,我想分享我们的解决方案。正如其他人已经明确表示的那样,您可以使用 svn:ignore 属性,这适用于单个目录(因此不适用于新目录),或者您使用 global-ignores 应用于单个用户(但不属于到存储库)。

            为了让生活更轻松,我创建了一个名为 Settings.Svn.reg 的 reg 文件并将其添加到存储库的根目录中。现在每个人都可以双击这个 regfile 一次,并完成设置。

            REGEDIT4
            
            [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
            "global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"
            

            我非常感谢 SVN 存储库中的解决方案,所以如果有人知道,您愿意分享吗?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-08-18
              • 1970-01-01
              • 1970-01-01
              • 2020-05-05
              • 2015-11-15
              • 1970-01-01
              • 2011-10-06
              相关资源
              最近更新 更多