代码之家  ›  专栏  ›  技术社区  ›  blackbird

从git-svn克隆中排除文件

  •  3
  • blackbird  · 技术社区  · 8 年前

    我正在将一个SVN repo迁移到Git,我有7000多个二进制文件,我希望从一开始就将其排除在导入之外,并成为Git历史的一部分,而不是在之后将其清除(参见 question ). 文件的位置没有遵循非常规则的模式,因此我必须向git提供一个相当长的位置列表,我需要考虑大约8000个提交。

    如果我的目标是避免不必要的文件使存储库膨胀,那么最好的方法是什么?

    有没有一种方法可以从一开始就排除这些,也许作为git-svn克隆的标志?将它们添加到 .gitignore 克隆之前阻止添加它们?

    另一个选项是导入全部,然后用 git filter-branch 在与其他人共享回购之前删除所有这些文件。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community holdenweb    4 年前

    根据你的问题和评论,我认为没有办法简单地克隆你不想要的某些文件。

    我相信,仅仅将文件放在gitingore文件中不会对您对repo所做的git克隆产生任何影响。

    但是,在服务器上,您可能可以创建一个过滤分支,该分支没有这些可以从中提取的文件 this 问题暗示了他们类似的问题:

    在服务器上:

    git checkout master^0    # the ^0 checks out the commit itself, not the branch
    git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD
    git checkout -b filtered
    

    (这里一个大项目的过滤器分支以每秒2-3次提交的速度生成新的历史记录)

    然后,在你喜欢的任何地方,

    git init
    git remote add gimme your://repo/path
    git fetch gimme filtered
    

    作为 documentation 说,filter分支命令可以用于以下情况,这似乎很好地包括了您所处的情况:

    这些过滤器可以修改每个树(例如删除一个文件或对所有文件运行perl重写)或关于每个提交的信息。否则,将保留所有信息(包括原始提交时间或合并信息)。


    编辑 :这有一个额外的好处,如果你想在将来从这个回购中拉到其他地方,那么它会简单得多,因为这是一个一次性修复,你可以应用于原始回购,而不是为每个克隆做一些事情。