SVN:递归地忽略一些目录

时间:2010-01-09 23:12:48

标签: svn version-control ignore

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

这可能吗?在git我只是把

build
dist

在我的.gitignore根目录下,它会递归忽略。我怎么用svn做这个?请不要告诉我在每个父母的目录上做一个propset ...

15 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:44)

svn propset选择--recursive,因此您可以执行此操作,但有两个缺点:

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

答案 2 :(得分:41)

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

答案 3 :(得分:16)

这对我有用:

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

答案 4 :(得分:12)

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

[miscellany]
global-ignores = build dist

答案 5 :(得分:8)

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

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

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

欢呼声, 乔

答案 6 :(得分:6)

例如文件夹结构:

Project/
Project/dist/

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

在ignore命令之前对dist内容进行svn删除是很好的,所以对于branches dist将是空的。

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

答案 7 :(得分:5)

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

  

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

请参阅Configuration Options

不幸的是,没有per-repository选项可以做到这一点。它基本上是每个用户或每个目录,所以多个svn:ignores可能是要走的路,尽管它很烦人。

答案 8 :(得分:5)

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

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/

答案 9 :(得分:4)

在subversion 1.8 over中,可以为当前存储库设置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 .

答案 10 :(得分:2)

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

则会忽略列表:

file1 
directory1
file2
etc...

然后应用以下命令

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

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

这假设您使用bash作为shell

答案 11 :(得分:2)

svn propset --recursive svn:ignore svn_ignore_rules .

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

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

svn_ignore_rules也可以被视为已检入仓库,可由具有对仓库的写入权限的其他用户重新使用

答案 12 :(得分:1)

cd parent_dir #the directory containing folder to be ignored recursively
svn propedit svn:ignore . #will open up svn-prop.tmp
enlist folder(s)
^X
Y
commit -m 'ignore targeted direcoty'

答案 13 :(得分:0)

一种方法是在提交前或提交后挂钩添加某种检查,但如果您不拥有repo服务器则直接注意。

答案 14 :(得分:0)

由于似乎没有解决这个可能常见的问题,我想分享我们的解决方案。正如其他人已经明确指出的那样,您可以使用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存储库中的解决方案,所以如果有人知道,你愿意分享吗?