忽略大型二进制文件的git-svn

6
我正在使用一个大型的svn仓库(30,000+修订版本),并尝试使用git-svn进行转换,但收效甚微。
我的主要问题是,svn仓库中包含频繁更新的大型二进制文件(约30MB)。我不关心这些文件的历史记录,但我确实关心这些文件的当前版本。如果自从上一次svn rebase后有多次更新,则git svn rebase的运行速度非常慢(这种情况很常见)。此外,我的git数据库也增长得非常快。我正在寻找解决这两个关键问题的方法。
理想情况下,我想从svn完全忽略这些大文件,然后运行一个脚本,只获取最新版本,然后在.gitignore中阻止它们。当然,我对其他选择也非常开放。

Git不使用任何智能算法来对二进制文件进行版本控制,它只是存储它们的每个版本,因此您的存储库会变得越来越大。请确保在Unix平台上使用git-svn,因为在Windows上它非常慢。我建议您忽略这些文件的路径,并通过修改最后一次提交来添加它们。 - rcomblen
你说建议我忽略那些文件的路径。我很愿意这样做,但我该怎么做呢? - ajb
3个回答

10

您可以使用git svn--ignore-paths选项来忽略某些文件:

 --ignore-paths=<regex>
               This allows one to specify a Perl regular expression that will
               cause skipping of all matching paths from checkout from SVN.
               The --ignore-paths option should match for every fetch
               (including automatic fetches due to clone, dcommit, rebase,
               etc) on a given repository.

                   config key: svn-remote.<name>.ignore-paths

               If the ignore-paths config key is set and the command line
               option is also given, both regular expressions will be used.

               Examples:

               Skip "doc*" directory for every fetch

                       --ignore-paths="^doc"

               Skip "branches" and "tags" of first level directories

                       --ignore-paths="^[^/]+/(?:branches|tags)"

看起来完美无缺。感谢您指引我正确的方向。 - ajb

2

git svn选项--ignore-paths=

在将svn仓库转换为git时,如果要排除不需要的二进制文件,则非常有用。

如果您知道二进制文件的文件扩展名,那么您可以编写一个正则表达式来排除它们。例如,

.jar文件: --ignore-paths=".*.jar$"


0

据我所知,使用git-svn不可能这样做,因为git-svn会获取整个svn信息并将其转换为git。检查您的打包文件,您会发现它是一个巨大的文件。

我会将巨大的文件/文件夹添加到.gitignore中,以便根本不处理它们。

这里发布了一个不错的解决方案: http://alblue.bandlem.com/2011/11/git-tip-of-week-git-bigjobbies.html


1
将文件/文件夹添加到.gitignore中并不能阻止'git svn rebase'拉取这些文件。 - ajb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接