关于svn:如何忽略Subversion中的文件?

关于svn:如何忽略Subversion中的文件?

How do I ignore files in Subversion?

如何忽略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列表不会被其他用户共享,并且它适用于您结帐到计算机上的所有存储库。
  • 此设置在运行时配置区域文件中定义:

    • Windows(基于文件) - C:\Users\{you}\AppData
      oaming\Subversion\config
    • Windows(基于注册表) - HKLMHKCU中的Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
    • Linux / Unix - ~/.subversion/config

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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

    (因此,即使在. repo根目录上应用"ignoreThis.txt",也不会忽略文件./subdirectory/ignoreThis

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

    • 这将在每个子目录上创建属性的副本。
    • 如果子目录中的值不同,则子项的值将完全覆盖父项,因此不存在"附加"效果。
    • 因此,如果更改根.上的,则必须使用--recursive更改它以在子目录和子目录上覆盖它。
  • 我注意到命令行语法是违反直觉的。

    • 我开始假设您通过键入类似svn ignore pathToFileToIgnore.txt的内容忽略SVN中的文件,但这不是SVN的忽略功能的工作方式。

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

  • 这与svn:ignore类似,不同之处在于它使用了SVN 1.8的"继承属性"功能。
  • svn:ignore相比,文件模式会自动应用于每个后代目录(不仅仅是直接子项)。

    • 这意味着不必使用--recursive标志设置svn:global-ignores,因为继承的忽略文件模式会在继承时自动应用。
  • 运行与上一示例中相同的命令集,但使用svn:global-ignores

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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资源管理器菜单系统中使用)最初误导我 - 我不确定忽略菜单的"添加递归","添加*"和"添加"的重要性选项。我希望这篇文章解释了Ignore功能如何与SVN Properties功能绑定。也就是说,我建议使用命令行来设置被忽略的文件,这样你就可以了解它的工作方式,而不是使用GUI,只有在熟悉命令行后才使用GUI来操作属性。

列出被忽略的文件:

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

使用--no-ignore选项查看列出的文件。忽略的文件的状态为I,然后将输出传递给grep,仅显示以"I"开头的行。

命令是:

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

例如:

1
2
3
4
5
6
7
8
9
10
11
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

当当!


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

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

然后编辑该文件,只留下您想要忽略的文件。然后使用这个忽略文件中列出的文件:

1
svn propset svn:ignore -F ignoring.txt .

注意该行末尾的点。它告诉SVN该属性是在当前目录中设置的。

删除文件:

1
rm ignoring.txt

最后提交,

1
svn ci --message"ignoring some files"

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

1
svn proplist -v


如果您使用的是TortoiseSVN,请右键单击文件,然后选择TortoiseSVN / Add to ignore list。这会将文件/通配符添加到svn:ignore属性。

检入文件时将检查svn:ignore,并忽略匹配的文件。我有一个Visual Studio .NET项目的以下忽略列表:

1
2
3
4
5
6
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

您可以在TortoiseSVN / Properties的上下文菜单中找到此列表。


.gitignore喜欢的方法

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

1
svn propset svn:ignore -F ignorelist.txt .

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

1
2
3
svn propset svn:ignore"first
 second
 third" .

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


我发现了Java的文章.svnignore示例。

示例:Ruby on Rails的.svnignore,

1
2
3
4
5
6
7
8
/log

/public/*.JPEG
/public/*.webp
/public/*.webp
/public/*.webp

*.*~

在那之后:

1
svn propset svn:ignore -F .svnignore .

.gitignore的例子。您可以使用.svnignore

https://github.com/github/gitignore


似乎没有人提到它......

1
svn propedit svn:ignore .

然后编辑文件的内容以指定要忽略的模式,退出编辑器并完成所有操作。


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

如果你在linux上使用tab-autocomplete创建文件开头,它们会自动插入:

1
2
svn propset svn:ignore 'file1
file2' .

另一种解决方案是

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

或逐行

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

它能做什么:

  • 从svn获取状态文件
  • 保存所有文件?到文件"svnignore.txt"
  • 获取已经被忽略的文件并将它们附加到文件"svnignore.txt"
  • 告诉svn忽略"svnignore.txt"中的文件
  • 删除文件

  • 此外,如果您使用Tortoise SVN,您可以这样做:

  • 在上下文菜单中选择"TortoiseSVN",然后选择"属性"
  • 在出现的窗口中单击"新建",然后单击"高级"
  • 在"Property name"对面的出现窗口中选择或输入"svn:ignore",与"Property value"相反输入所需的文件名或文件夹名或文件掩码(在我的例子中是"* / target"),单击"Apply"属性递归"
  • 好。好。
  • 承诺

  • bkbilly答案的更易阅读的版本:

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

    它能做什么:

  • 从svn获取状态文件
  • 保存所有文件?到文件"svnignore.txt"
  • 获取已经被忽略的文件并将它们附加到文件"svnignore.txt"
  • 告诉svn忽略"svnignore.txt"中的文件
  • 删除文件

  • cd~ / .subversion
  • 打开配置
  • 找到像'global-ignores'这样的行
  • 设置忽略文件类型如下:global-ignores = * .o * .lo * .la * .al .libs * .so .so。[0-9] * .pyc * .pyo
    88 * .rej~ ##。#*。*。swp .DS_Store node_modules输出

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

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

    要么

    1
    svn propset svn:ignore '*' .

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


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

    查看ignore属性的SVN属性。

    对于所有SVN,红皮书是必读的。


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

    这将添加svn:ignore属性中的文件。
    当我们检入文件时,那些与svn:ignore匹配的文件将被忽略并且不会提交。

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

    1
    2
    3
    4
    5
    bin obj
    *.exe
    *.dll
    *.pdb
    *.suo

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


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

    至于忽略需要编辑svn:ignore属性的文件,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore中svnbook中忽略无版本项目一章。 HTML。本书还介绍了有关使用svn状态的更多信息。


  • 打开你使用JetBrains产品(即Pycharm)
  • 然后单击顶部工具栏上的"提交"按钮或使用快捷键'ctrl + k'
    screenshot_toolbar
  • 在提交界面上,将您不需要的文件移动到另一个更改列表,如下所示。
    screenshot_commit_change
  • 下次您只能提交默认更改列表。

  • 推荐阅读

      更新文件命令linux?

      更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

      linux重名名文件命令?

      linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

      linux扩展文件命令?

      linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

      linux文件替换命令行?

      linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批

      linux命令行解锁文件?

      linux命令行解锁文件?,系统,地址,工具,工作,管理,电脑,命令,文件,信息,密码,L

      读写文件命令linux?

      读写文件命令linux?,系统,数字,电脑,档案,地址,命令,文件,标准,位置,设备,lin

      linux文件异或命令?

      linux文件异或命令?,数字,系统,工作,管理,命令,数据,网络,文件,第一,单位,基

      linux文件复制的命令?

      linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选

      linux写文件命令行?

      linux写文件命令行?,工作,系统,命令,信息,名字,文件,目录,资料,标准,时间,lin

      linux复制命令文件?

      linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

      linux下文件均分命令?

      linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,L

      linux的文件替换命令?

      linux的文件替换命令?,系统,工作,实时,命令,文件,批量,字符串,内容,方法,表

      linux命令有两个文件?

      linux命令有两个文件?,文件,代码,系统,命令,两个,内容,文件夹,光标,后方,文

      linux查文件数量命令?

      linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,l

      linux命令去重文件?

      linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Lin

      linux写大文件命令?

      linux写大文件命令?,服务,数据,第三,较大,基础,工具,设备,文件,大小,命令,lin

      linux查询文件夹命令?

      linux查询文件夹命令?,系统,软件,电脑,命令,文件,文件夹,单位,第三,档案,数

      linux多文件打包命令?

      linux多文件打包命令?,系统,工具,时间,代码,文件,命令,文件夹,目录,指令,格

      linux命令的头文件?

      linux命令的头文件?,系统,单位,信息,代码,情况,位置,时报,项目,百度,命令,lin

      linux匹配文件名命令?

      linux匹配文件名命令?,系统,时间,发行,位置,工具,软件,名称,盘后,电脑,盘中,l