如何忽略 Subversion 中的文件?

2024-01-12

如何忽略 Subversion 中的文件?

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


(此答案已更新以匹配 SVN 1.8 和 1.9 的行为)

您有 2 个问题:

将文件标记为忽略:

我所说的“忽略文件”是指该文件不会出现在列表中,即使是“未版本控制”:您的 SVN 客户端会假装该文件在文件系统中根本不存在。

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

Subversion 从 1.8 版(2013 年 6 月)及更高版本开始,支持 3 种不同的指定文件模式的方式。以下是带有示例的摘要:

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

  • 这是一个仅客户端设置,所以你的global-ignores列表不会被其他用户共享,并且它适用于您在计算机上签出的所有存储库。
  • This setting is defined in your Runtime Configuration Area file:
    • Windows(基于文件)-C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows(基于注册表)-Software\Tigris.org\Subversion\Config\Miscellany\global-ignores同时HKLM and HKCU.
    • Linux/Unix -~/.subversion/config

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

  • 这存储在存储库中,因此其他用户将拥有相同的忽略文件。类似于如何.gitignore works.

  • 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.

    • 这将在每个子目录上创建该属性的副本。
    • If the <filePattern>子目录中的值不同,则子目录的值完全覆盖父目录,因此不存在“相加”效果。
    • 所以如果你改变<filePattern>在根上.,那么你必须将其更改为--recursive在子目录和后代目录上覆盖它。
  • 我注意到命令行语法是违反直觉的。

    • 我一开始假设你会通过输入类似的内容来忽略 SVN 中的文件svn ignore pathToFileToIgnore.txt然而这并不是 SVN 忽略功能的工作原理。

3- The svn:global-ignores财产。需要 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将隐藏被忽略的文件(即与 RCA 匹配的文件)global-ignores模式,或匹配直接父目录的svn:ignore模式或匹配任何祖先目录svn:global-ignores图案。

Use the --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

ta-da!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何忽略 Subversion 中的文件? 的相关文章

  • 用于阻止大于 20MB 的提交的预提交挂钩

    是否可以为 SVN 1 8 编写 prcommit 挂钩以避免提交大于 20MB 的文件 任何建议 将不胜感激 谢谢 我尝试过 但这不适用于二进制文件或其他文件扩展名 filesize SVNLOOK cat t TXN REPOS f w
  • virtualenv、python 和 subversion

    我正在尝试在 python subversion SWIG 库中使用virtualenv no site packages环境 我怎样才能做到这一点 你可以从 svn 将其安装在 virtualenv 中 source home you v
  • Eclipse、Subclipse 1.8.2、SVN 1.7.0 每次操作都要求输入密码

    我安装新的后日食靛蓝 它会要求我输入密码SVN存储库透视图 例如 浏览每个文件夹并再次询问密码 正常使用SVNKit 它要求输入密码每次会话一次 SVNKit 不支持SVN 1 7 0 yet 我该如何解决这个问题 或者这是 JavaHL
  • Subversion 中的忽略文件会从 svn:ignore 属性中删除旧值

    我有一个 Subversion 工作副本G csmdepot 构建其中有不同的文件 有些被忽略 有些则没有 我忽略了 Tortoise 的文件 Build 1 wimignored Build 2 wimignored WimID xml
  • 有没有办法过滤掉 TortoiseSVN 日志中仅属性的更改?

    SVN 的 mergeinfo 功能确实很有用 但是当文件上的所有更改都是 svn 属性时 它会在修订日志中放置一个日志条目 而我们通常不希望看到这些 有没有办法过滤掉 TortoiseSVN 日志中仅属性的更改 拉起日志 选择您要比较的两
  • 构建版本与修订号

    我有一个使用 subversion 进行源代码控制的 asp net C 应用程序 我的应用程序会在每个构建上自动增加其 AssembleVersion 和 AssemblyFileVersion 这就像一个魅力 并在网站的管理端显示构建号
  • WPF - 从 UserControl 发出命令时 CanExecute 不会触发

    我有一个按钮条用户控件 我想在我的大多数表单上使用它 我添加了如下命令 public ICommand Create get return buttonCreate Command set buttonCreate Command valu
  • 当文件标记为“历史记录已提交”时,svn diff

    我对已合并到工作目录中主干的分支进行了更改 svn stat 显示已更改文件的正确列表 但是 svn stat 输出在计划提交新添加到分支的每个文件的历史记录中包含一个 A src main java com java 当我运行 svn d
  • 在家庭和办公室进行开发,GIT 会比使用 xcopy 的 SVN 更容易吗?

    如果出于安全原因 源代码只能存储在我的家庭计算机和办公室计算机上 如果传输代码的唯一方法是 USB 密钥 那么哪种源代码控制是最好的 SVN还是GIT 注意 两台计算机之间没有网络连接 我推荐git 无论哪种方式 您都需要 USB 密钥上的
  • Django:如何从管理界面调用管理自定义命令执行?

    参考 从代码执行管理命令 https stackoverflow com questions 907506 how can i call a custom django manage py command directly from a t
  • 如何在 svn 存储库中本地忽略 .git 和 .gitignore?

    我有一个 SVN 工作副本 由 TortoiseSVN 管理 在该工作副本中 我使用 git 进行本地版本控制和分支 当然 我想隐藏svn的 git目录和 gitignore文件 但是 忽略它们意味着将属性添加到不再是本地的存储库中 我不希
  • 比较在 Eclipse Neon 中不工作

    我 最后 尝试从 Mars 2 升级到 Eclipse Neon 安装 SVN 支持和 SVNKit 1 8 14 连接器后 我可以访问我的存储库 然而Compare不管用 如果我右键单击已修改的文件 然后选择与工作副本中的基础进行比较将显
  • 如何将 SVN 修订号注入 JAR 中?

    我希望我的 JAR WAR 应用程序知道其源代码的 SVN 修订号是多少 我希望稍后在网页底部等处为网络最终用户呈现此修订号 是否有任何现有的 Maven 插件可以自动化该过程 我认为该插件必须从以下位置收集信息svn并保存到某个文件 例如
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 有 SVN 基准吗?

    我们想要对本地 SVN 服务器进行一些性能优化 例如迁移到更好的服务器 添加 SSD 等 我可以使用一些基准来查看这些修改是否确实有助于性能 是的 有一个 由 CollabNet 发布 https ctf open collab net s
  • 让 hudson 将源签出到特定目录

    这似乎是一个简单的任务 但在我的一生中 我无法让 Hudson 将我的源代码签出到特定目录 我可以在命令行上使用 svn 查看源代码 我尝试在源代码管理下指定本地模块设置 但没有骰子 我将其设置为 c source trunk 并在运行构建
  • 将 SVN 存储库从 Google Code 传输到 RiouxSVN

    我在 Google Code 上有存储库 现在我想将这些代码存储库从 Google Code 移动到 RiouxSVN 问题是我不知道如何实现这一点 我曾尝试使用 svnadmin 和 svnrdump 但无法成功 对于 svnrdump
  • TortoiseSVN 不要求身份验证?

    我已经在conf文件中设置了一个新的SVN存储库 运行SVNServe anon access none SVNServe 忠实地正确地做到了这一点 但是当我尝试使用 TortoiseSVN 浏览存储库时 它只是说不允许访问 它不应该要求我
  • IntelliJ IDEA 中多个 SVN 分支的工作流程

    我想使用 IntelliJ IDEA 在 SVN 主干和一个或几个功能分支之间轻松切换 最好能够同时在多个分支上工作 我有一些 本地 配置 例如用于集成测试的数据库设置和启用的调试日志记录 我想继续使用而不是提交到 SVN 各种选择的优缺点
  • 如何保持 Subversion 和远程服务器(通过 FTP)同步?

    我们很难保持 Subversion 和 FTP 同步 有时我们忘记提交更改并只是将它们推送到 Web 服务器 我们的 svn 文件夹分散在整个 Web 服务器中 有些东西存在于一个地方而不存在于另一个地方 等等 今天我想花点时间解决这个问题

随机推荐