版本控制 - SVN:递归忽略一些目录

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

这可能吗? 在git我刚刚放

build
dist

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

Paul Tarjan asked 2019-07-29T23:15:21Z
15个解决方案
49 votes

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

twin answered 2019-07-29T23:15:33Z
44 votes

svn:ignore作为选项使用--recursive,因此您可以执行此操作,但有两个缺点:

  1. 你必须检查整个存储库(或至少其中的所有目录),和
  2. 每当添加新目录时,您必须记住设置svn:ignore属性
Michael Hackner answered 2019-07-29T23:16:12Z
41 votes

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

Kevin Reid answered 2019-07-29T23:16:37Z
16 votes

这对我有用:

 svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>
Stewart answered 2019-07-29T23:16:57Z
12 votes

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

[miscellany]
global-ignores = build dist
jspcal answered 2019-07-29T23:17:22Z
8 votes

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

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

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

干杯,乔

jsharit answered 2019-07-29T23:18:02Z
6 votes

例如文件夹结构:

Project/
Project/dist/

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

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

为我工作,今天进行测试。这是一个解释它的页面

marian answered 2019-07-29T23:18:40Z
5 votes

为了忽略所有存储库中的所有此类文件,您可以将svn:ignores添加到每个用户的配置文件中。

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

请参阅配置选项

不幸的是,没有每个存储库选项来执行此操作。 它基本上是每个用户或每个目录,所以多个svn:ignores可能是要走的路,尽管它很烦人。

Blair Conrad answered 2019-07-29T23:19:27Z
5 votes

您首先必须移动到工作副本的顶级文件夹并在那里创建一个文件(例如.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/]

Luccas Correa answered 2019-07-29T23:20:14Z
4 votes

在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 .
John Zhu answered 2019-07-29T23:20:54Z
2 votes

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

忽略列表:

file1 
directory1
file2
etc...

然后应用以下命令

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

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

这假设您使用bash作为shell

jncc99 answered 2019-07-29T23:21:47Z
2 votes
svn propset --recursive svn:ignore svn_ignore_rules .

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

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

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

georg answered 2019-07-29T23:22:26Z
1 votes
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'
Moin Haidar answered 2019-07-29T23:22:45Z
0 votes

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

8DH answered 2019-07-29T23:23:10Z
0 votes

由于似乎没有解决这个可能常见的问题,我想分享我们的解决方案。 正如其他人已经明确的那样,您可以使用Settings.Svn.reg属性,这适用于单个目录(因此不适用于新目录),或者您使用适用于单个用户的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存储库中的解决方案,所以如果有人知道,你愿意分享吗?

martinstoeckli answered 2019-07-29T23:23:51Z
translate from https://stackoverflow.com:/questions/2035335/svn-ignore-some-directories-recursively