如果我使用svn:ignore忽略一个非常大的文件夹,会提高SVN更新期间的性能吗?
我的项目中有一个非常庞大(> 600MB)的文件夹。这个文件夹中的文件应该根本不会发生变化。问题是每次我调用“svn update”都需要很长时间。是否有一种方法可以在更新过程中忽略此文件夹以加快更新速度?
如果我使用svn:ignore忽略一个非常大的文件夹,会提高SVN更新期间的性能吗?
我的项目中有一个非常庞大(> 600MB)的文件夹。这个文件夹中的文件应该根本不会发生变化。问题是每次我调用“svn update”都需要很长时间。是否有一种方法可以在更新过程中忽略此文件夹以加快更新速度?
svn:ignore
只用于那些尚未在 Subversion 仓库中的文件,而这个文件夹已经在其中。
您可以使用 svn update --set-depth exclude
文件夹名称
命令将这个文件夹从您的工作目录中删除:
$ 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
...
你可以执行 svn update 命令,然后指定需要更新的其他目录,例如:
svn update dir1 dir2 dir3
或者,使用 grep -v 命令来过滤掉你不想要的内容。
svn update `ls | grep -v big_dir`
或者,将big_dir用svn mv移动到另一个文件夹中,然后更改您的构建系统以从其他目录获取内容。
只需要做:
svn up `svn ls | grep -v big_dir`
使用 "svn ls" 命令可以更新本地存在的目录和文件,也可以从版本库获取新文件。因此,更新比排除更完整。您无需像"--set-depth exclude" 命令那样删除已经存在的文件。
ls
命令的输出通常是一个不好的主意 http://mywiki.wooledge.org/ParsingLs - Doppelgangerls
命令的。但在答案代码中使用了 svn ls
命令,两者有一点不同。 - Fedir RYKHTIKls
的常见陷阱在于它不能很好地处理文件名中带有换行符的情况。svn ls
避免了这个问题,因为svn不会让你添加文件名中带有换行符的文件。svn add 'a b' svn: E160005: Invalid control character '0x0a' in path '/svn-test/a\012b'
- Doppelgangersvn up $(svn ls | grep -wv big_dir)
(同时将反引号改为$(...)
)。 - Renatosvn up --ignore-externals
。svn checkout repo . --depth empty
svn up other dirs
svn file structure:
trunk
|___ folder1
|___ folder2
|___ folder3
|___ other_folder
首先,在结账时,请使用 immediates,仅结账第一级文件夹和文件:
然后,设置一些文件夹以便稍后更新:
现在,只有文件夹 123 可以更新,其他第一级文件夹仍保留在 trunk 文件夹中。