SVN:递归忽略某些目录


106

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

这可能吗?在git中,我只是把

build
dist

在我.gitignore的根源,它递归地忽略。我该如何使用svn?请不要告诉我在每个父目录上做一个propset ...


如果您使用的是Subversion 1.8,请查看此答案以获取本机解决方案。
Frank Kusters '16

Answers:


57

从Subversion 1.8开始,现在有一个svn:global-ignores属性,其工作方式与svn:ignore递归类似(因此请在顶级目录中进行设置)


3
我有点困惑- 文件中有global-ignores~/.subversion/config文件,还有SVN存储库中某个目录上设置的可继承 svn:global-ignores属性,以及svn:ignore-您能否提供这些不同选项的摘要以及它们之间的比较方式?请问该--recursive标志影响他们呢?

2
我已经完成了自己的研究,并在以下质量检查答复中发表了自己的发现:stackoverflow.com/a/86052/159145
2017年

[我尝试过但失败了,obj文件夹仍然显示](stackoverflow.com/questions/50960188/…),您能帮我看看吗?
路加福音

我可以说“ build / *”忽略每个构建文件夹中的build之下的所有内容吗?
约翰内斯·绍布

45

svn propset需要--recursive作为一个选项,这样你就可以做到这一点,有两个缺点:

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

42

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


7
svn propset-递归svn:ignore svn_ignore_rules svn_ignore_rules由包含文件,其中忽略规则-每行一个
乔治

3
''svn propset-递归svn:ignore -file svn_ignore_rules'。对我而言,使用svn-1.7.6,否则您将递归地忽略名为“ svn_ignore_rules”的文件[编辑:根据下面的评论中的“ wytten”]
elbeardmorez 2013年

9
致评论者:询问者说:“请不要告诉我在每个父母的目录上做一个propset ...”。
凯文·瑞德

5
现在可以在Subversion 1.8
Squirrel'Apr

17

这对我有用:

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

2
谢谢您的配合,效果很好...顺便说一句,我发现忽略* .txt和* .pdf的唯一方法是将这些模式放在文件中,然后使用'svn
propset

13

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

[miscellany]
global-ignores = build dist

如果可以的话,我宁愿按回购交易做
Paul Tarjan 2010年

1
嗯,不确定每次回购是否有一种简单的方法,一个预先提交的钩子可以拒绝某些模式,但这不是一个完整的解决方案。svn:ignore在每个父目录上都有效,但不是递归的。您可以在使用不同的存储库时用脚本交换配置文件,但这是一个额外的步骤。
jspcal 2010年

1
什么构建DIST是什么意思?
IgorGanapolsky

9

通过从版本控制中删除目录,可以忽略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将为空。

为我工作,今天经过测试。 这是稍微解释一下的页面


6

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

在类似Unix的系统上,该区域在用户的主目录中显示为名为.subversion的目录。在Win32系统上,Subversion通常在用户配置文件目录的Application Data区域内创建一个名为Subversion的文件夹。

请参阅配置选项

不幸的是,没有每个存储库的选项可以执行此操作。它基本上是按用户或按目录的,因此多重svn:ignores方式可能是可行的方式,这可能会很烦人。


1
如果可以的话,我宁愿按回购交易做
Paul Tarjan 2010年

哦,那你真不走运。就像@Kevin Reid所说-您有按目录或按用户的目录。
布莱尔·康拉德

6

首先,您必须移至工作副本的顶部文件夹,并在此处创建一个文件(例如.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的忽略行为的最佳方法。非常感谢。
乔纳森·威尔逊

6

在Subversion 1.8以上的版本中,可以为当前存储库设置全局忽略。

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 .

完美地工作!只需在新签出的仓库上运行第一个命令。
gaurav

3

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

ingore列表:

file1 
directory1
file2
etc...

然后应用以下命令

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

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

这是假设您正在使用bash作为外壳


这里的$ n是多少?
IgorGanapolsky

1
@igor Ganapolsky-$ n是for循环的变量。它将被设置为您要循环到的序列的索引;在这种情况下,该目录由上例中的“目录”指定。
jncc99 '16

3
svn propset --recursive svn:ignore svn_ignore_rules .

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

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

svn_ignore_rules也可以视为已签入回购协议,可供具有回购协议写入权限的其他用户重用


2
cd parent_dir#包含要递归忽略的文件夹的目录
svn propedit svn:ignore。#将打开svn-prop.tmp
登记文件夹
^ X
ÿ
commit -m'忽略目标货币'

帮助了我,我在设置文件夹模式时遇到了问题,SVN正在使该文件夹不在存储库中set EDITOR=notepadsvn propedit svn:ignore .效果很好...
Betlista

1

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

为了简化工作,我创建了一个名为reg的reg文件Settings.Svn.reg,并将其添加到存储库的根目录中。现在,每个人都可以一次双击此regfile,并完成设置。

REGEDIT4

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

我非常感谢SVN信息库中的解决方案,因此,如果有人知道,您是否愿意分享它?


0

一种方法是在提交前或提交后的挂钩中添加某种检查,但是如果您没有回购服务器,请注意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.