2011-05-12 123 views
32

如果我svn:忽略一个真正的大文件夹,它会提高SVN更新期间的性能吗?在SVN更新期间忽略文件夹

我的项目中有这个非常庞大(> 600MB)的文件夹。这个文件夹中的文件不应该改变。问题在于,每次我打电话给“svn update”时,都会花费很长时间。有没有办法在更新期间忽略此文件夹以加快更新过程?

+0

与此类似SO贴子http://stackoverflow.com/questions/116074/how-to-ignore-a-directory-with-svn – 2011-05-12 21:26:58

+3

svn:ignore只能用于忽略* unversioned *文件。您仍然可以添加由svn:ignore匹配的文件,并且它们将像存储库中的任何其他文件一样对待。 – 2011-05-12 21:28:50

+0

你可以试试看看是否有帮助。 – MichaelHouse 2011-05-12 21:32:24

回答

44

svn:ignore仅适用于尚未文件在Subversion版本库中。这个文件夹已经是。

可以使用svn update --set-depth excludefolderName从工作目录中删除此文件夹:

$ svn update --set-depth exclude bigFolder #Removes "bigFolder" from workdir 
D bigFolder 

$ 

你做一个更新下一次,bigFolder不会在工作目录显示出来。如果你想回去,你就必须重新设置深度:

$ svn update --set-depth infinity 
U bigFolder 
U bigFolder/File1 
U bigFolder/File2 
... 
+8

我不喜欢它删除文件夹。我只想不更新现有的。 – 2013-06-13 09:27:01

9

你可以做一个svn更新,并特别提及每个其他目录,例如

svn update dir1 dir2 dir3 

或者,grep -v输出你不想要的东西。

svn update `ls | grep -v big_dir` 

或者SVN MV的big_dir成另一个文件夹,改变你的构建系统,以获得从其他目录的内容。

+2

它不会更新新的文件夹,只存在。 – 2013-06-13 09:26:25

3

除了@Bill Brasky说的,一个建议是将巨大的文件夹移动到外部。这样,你可以做svn up --ignore-externals

如果你不想在你的工作拷贝巨大的文件夹,你可以看看稀疏检出:

svn checkout repo . --depth empty 
svn up other dirs 
8

只要做到:

svn up `svn ls | grep -v big_dir` 

使用“SVN LS”你可以更新不仅在本地现有的目录和文件,但新档案库中的文件。因此,更新更完整,而不仅仅是排除。而且你不需要删除已经存在的文件,比如“--set-depth exclude”。

+0

解析'ls'输出通常是一个坏主意[http://mywiki.wooledge.org/ParsingLs](http://mywiki.wooledge.org/ParsingLs) – Doppelganger 2014-06-24 19:45:23

+1

@Doppelganger在这篇文章中,它是关于'ls'。在答案代码'svn ls'中。这有点不同。 – 2014-06-25 08:11:25

+2

你是对的。解析'ls'常见的缺陷是它不能很好地处理名称中带有换行符的文件名。 'svn ls'避免了这个问题,因为svn不会让你在他们的名字中添加带有换行符的文件。'SVN加“一 B” 的svn:E160005:无效的控制字符在路径“0X0A”“/ SVN-测试/ A \ 012b'' – Doppelganger 2014-06-26 14:22:57