git svn忽略路径使用忽略文件

时间:2012-08-24 03:41:17

标签: git svn git-svn gitignore

我正在将一个svn repo转换为一个git repo,我们有许多二进制文件,这些文件多年来已经检查过,不应该有图像和其他文件,我真的不想要这些文件出现在git repo占据空间。

我使用git-svn来转换repo并使用了它的-ignorepaths属性但是我希望能够将列表提供给忽略路径,而不必为每个模式/目录指定一个忽略路径我想排除,如果我可以在转换过程中使用svnignore / gitignore文件来取出更好的垃圾。

有没有办法做到这一点,或者我只需要点击子弹并单独指定每个模式/路径?

编辑:更新的问题更清楚我要问的是什么

3 个答案:

答案 0 :(得分:2)

如果你习惯了git,那么Subversion有点复杂。 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-pathsgit svn clone一起使用。完成此操作后,它会添加到.git/config文件中,因此您不必在每次获取内容时都不断指定它。

将现有的.gitignore文件转换为Perl正则表达式以便与--ignore-paths一起使用并不像看起来那么复杂,因为您可以将术语放在一起。

例如:

/[Dd]ebug/|^rootfile.txt$|\.bak$

排除路径中任意位置的debug个文件夹,回购根目录中的特定文件rootfile.txt以及所有*.bak个文件。

提示:

  • 以正斜杠结尾的表达式将排除指定文件夹的内容,但不包括文件夹本身
  • ^匹配存储库的根目录,而根目录中的路径不是以斜杠开头
  • 如果需要,您可以使用lookaround expressions in the regexes,例如排除所有Bin个文件夹,除非前面有某个特定目录

答案 2 :(得分:0)

如果要将svn:ignore转换为.gitignore,反之亦然,则可以使用SubGit代替git-svn,它会自动执行此转换。最简单配置中的转换命令如下所示:

$ subgit install path/to/svn/repository