如何忽略 Subversion 中的文件?

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

有帮助吗?

解决方案

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

您有 2 个问题:

将文件标记为忽略:

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

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

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

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

  • 这是一个 仅客户端 设置,所以你的 global-ignores 列表不会被其他用户共享,并且它适用于您在计算机上签出的所有存储库。
  • 此设置在您的运行时配置区域文件中定义:
    • 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 属性,在目录(而不是文件)上设置:

  • 这存储在存储库中,因此其他用户将拥有相同的忽略文件。类似于如何 .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 中的文件 svn ignore pathToFileToIgnore.txt 然而这并不是 SVN 忽略功能的工作原理。

3- 的 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 将隐藏被忽略的文件(即与 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 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

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

svn:ignore 签入文件时会进行检查,匹配的文件将被忽略。我有以下 Visual Studio .NET 项目的忽略列表:

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

您可以在上下文菜单中找到此列表: TortoiseSVN / 属性.

您可以忽略文件或目录,例如 .gitignore. 。只需创建一个包含要忽略的目录/文件列表的文本文件,然后运行以下代码:

svn propset svn:ignore -F ignorelist.txt .

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

svn propset svn:ignore "first
 second
 third" .

来源:Karsten 的博客 - 从命令行设置 svn:ignore 多个文件

我找到了这篇文章 .svnignore Java 示例.

例子:.svnignore 用于 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

好像没人提到过...

svn propedit svn:ignore .

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

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

如果您在 Linux 上使用 tab-autocomplete 来创建文件,则会自动插入这些内容:

svn propset svn:ignore 'file1
file2' .

另一个解决方案是:

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 忽略“svnignore.txt”中的文件
  5. 删除文件

另外,如果你使用 Tortoise SVN,你可以这样做:

  1. 在上下文菜单中选择“TortoiseSVN”,然后选择“属性”
  2. 在出现的窗口中单击“新建”,然后单击“高级”
  3. 在“属性名称”对面出现的窗口中,选择或键入“svn:ignore”,在“属性值”对面键入所需的文件名或文件夹名称或文件掩码(在我的例子中是“* / target”),单击“应用”递归性质”
  4. 好的。好的。
  5. 犯罪

更具可读性的版本 比克比利的回答:

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 忽略“svnignore.txt”中的文件
  5. 删除文件
  1. cd ~/.subversion
  2. 打开配置
  3. 找到像“global-ignores”这样的行
  4. 设置忽略文件类型,如下所示:全局忽略 = *.o *.lo *.la *.al .libs *.so .所以.[0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.swp .DS_Store node_modules 输出

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

svn status 会告诉你哪些文件不在 SVN 中,以及哪些文件发生了变化。

看着那(这 SVN 属性 对于忽略属性。

对于 SVN 的所有事情, 红色的书 是必读的。

将目录添加到 subversion,并忽略目录内容

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

或者

svn propset svn:ignore '*' .

SVN ignore 在 TortoiseSVN 中易于管理。打开 TortoiseSVN 并右键单击文件菜单,然后选择添加到忽略列表。

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

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

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

我们正在 SVN 上管理源代码 比较陷阱 使用此方法成功

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

至于忽略文件,您需要编辑 svn:ignore 属性,请阅读 svnbook 中的忽略未版本化项目一章: http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html. 。本书还描述了更多关于使用 svn status 的信息。

  1. 打开您使用 JetBrains 产品(即皮查姆)
  2. 然后单击顶部工具栏上的“提交”按钮或使用快捷键“ctrl + k”截图工具栏
  3. 在提交界面上,将不需要的文件移动到另一个更改列表,如下所示。屏幕截图_提交_更改
  4. 下次您只能提交默认更改列表。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top