我正在将一个svn repo转换为一个git repo,我们有许多二进制文件,这些文件多年来已经检查过,不应该有图像和其他文件,我真的不想要这些文件出现在git repo占据空间。
我使用git-svn来转换repo并使用了它的-ignorepaths属性但是我希望能够将列表提供给忽略路径,而不必为每个模式/目录指定一个忽略路径我想排除,如果我可以在转换过程中使用svnignore / gitignore文件来取出更好的垃圾。
有没有办法做到这一点,或者我只需要点击子弹并单独指定每个模式/路径?
编辑:更新的问题更清楚我要问的是什么
答案 0 :(得分:2)
svn:ignore
是一个基于每个文件夹工作的属性。在特定文件夹中,您只能忽略特定文件或直接子文件夹。
您可以将文件传递给在DIRECTORY上设置忽略属性的命令,您也可以使用以下命令将.gitignore文件传递给它:
svn propset svn:ignore -F .gitignore DIRECTORY
但是出于上述原因,像*/build
这样的.gitignore中的实际部分对Subversion没有任何影响。
你可以做的唯一事情是使用--depth
的{{1}}参数,例如,如果你传递svn propset
,它将为DIRECTORY和每个直接子文件夹设置属性。还有一些方法可以指定深度或只是使其成为无效的 - 我认为TAB完成在那里工作或查看帮助。
但仍然存在一个主要缺点:每次添加包含要忽略的文件的文件夹时,都必须再次运行--depth immediates
命令。
答案 1 :(得分:1)
我可以确认git svn
不从Subversion获取.gitignore
的内容时,无论.gitignore
是否已被检查进入回购。
正如您的问题所述,解决方案是将--ignore-paths
与git svn clone
一起使用。完成此操作后,它会添加到.git/config
文件中,因此您不必在每次获取内容时都不断指定它。
将现有的.gitignore
文件转换为Perl正则表达式以便与--ignore-paths
一起使用并不像看起来那么复杂,因为您可以将或术语放在一起。
例如:
/[Dd]ebug/|^rootfile.txt$|\.bak$
排除路径中任意位置的debug
个文件夹,回购根目录中的特定文件rootfile.txt
以及所有*.bak
个文件。
^
匹配存储库的根目录,而根目录中的路径不是以斜杠开头Bin
个文件夹,除非前面有某个特定目录答案 2 :(得分:0)
如果要将svn:ignore转换为.gitignore,反之亦然,则可以使用SubGit代替git-svn,它会自动执行此转换。最简单配置中的转换命令如下所示:
$ subgit install path/to/svn/repository