如何使用git过滤器分支从主分支中取出一些大文件

如何使用git过滤器分支从主分支中取出一些大文件,git,git-filter-branch,Git,Git Filter Branch,我是git的初学者,主要依赖于源代码树之类的GUI工具,所以请耐心听我说 在我们的git回购协议中,我们有多个产品依赖于非常相似的核心代码库。我们通过为每种产品设立分支机构来实现这一目标。当我们第一次开始开发时,我们没有将其建立为工作流,因此我们的分支历史有点像这样: master | B | C \ | / \|/ | | A | / |/ 2 | | 1 | | A、 B和C是特定于产品的分支机构,A是我们为客

我是git的初学者,主要依赖于源代码树之类的GUI工具,所以请耐心听我说

在我们的git回购协议中,我们有多个产品依赖于非常相似的核心代码库。我们通过为每种产品设立分支机构来实现这一目标。当我们第一次开始开发时,我们没有将其建立为工作流,因此我们的分支历史有点像这样:

 master
   |
B  |  C
 \ | /
  \|/
   |
   |  A
   | /
   |/
   2
   |
   |
   1
   |
   |
A、 B和C是特定于产品的分支机构,A是我们为客户提供的第一个产品

问题

不幸的是,在第(1)点左右,我们已经在开发一个项目,并且已经开始提交大量的.png文件(大约100MB的文件),但还没有考虑将其作为一个单独的项目进行分支。我已经尝试过从B和C中的repo(以及主分支)中删除这些大文件,但它们当然仍然在git提交历史记录的第(1)点和第(2)点之间

那么,我有没有办法重写历史记录,使分支A实际上从第1点开始,并将特定于该产品的所有文件移动到该分支中?谢天谢地,筛选出与产品A相关的文件应该是相当容易的,因为它们大多位于单独的目录中

理论上,主分支只需要~10MB,因为它主要由代码组成,这意味着人们只能查看特定的产品分支,并且只能从github下载他们实际需要的文件

谢谢


编辑:注意,这是一个类似的问题:

以下应该可以解决这个问题:

git checkout A
git rebase 2 --onto 1
首先,备份

然后,执行以下操作:

git filter-branch -f --prune-empty --tree-filter 'rm -rf PATH/TO/FILE-OR-FOLDER' HEAD
然后

git gc --aggressive

通过

否。。。您具体建议我重新设定基准是什么?怎么做?我看不出你的确切要求。您可以使用rebase在树上移动提交。阅读有关rebase的文档,并尝试将其与您的需求相匹配。也许您需要交互式重新基址来手动排序提交。您想要的最终结果是:1)
master
不包含png提交;2) png提交完全在
A
中;3)
A
几乎是从
master
或commit
2
?1)的当前提示分支出来的。实际上,我只是不希望master在文件夹中有任何名为“A”的内容,包括代码和PNG(碰巧也是分支的名称)2)是的。3) A是从提交2分支出来的,但我希望A'在提交1分支出来,并在提交之前包含1到2之间的所有提交。然后母版包括1->2,但文件夹“A”中没有任何内容。谢谢!:)嗯,不知道为什么,但那对我不起作用?当我尝试用SHAs替换“2”和“1”时,以及当我尝试创建命名分支时。另外,也许我没有说清楚,但是在第1点和第2点之间有很多提交,它们都是特定于A和非特定于A的,但是它们应该很容易过滤,因为所有特定于A的文件都在一个名为“A”的目录中。谢谢为了澄清这一点,我回答了一个问题:“我有没有办法重写历史,这样分支A实际上从第1点开始”。我用我的一些存储库测试了这个命令,它成功了。您到底是如何失败的?我获得了提交的SHA1,并输入:
$git rebase 149c2e1b4f252e8bdb636997803a54f827edc71——到CA44f4503a72e649e7ebebeb6a3428ddd1e43e1d
。输出是:
Usage:git-rebase[--interactive |-i][v][--force-rebase |-f][--no-ff][--on](|--root)[--quiet |-q]
鉴于1到2之间的一系列提交是分支A的直接连续祖先,我不确定这到底有什么帮助?您使用的是哪个版本的git?我使用的是1.7.12,在c3a7fa28d916f0ad6194b15e3484efcf339f64bd上有一行类似于
git rebase f79d8b152629466f9195fd78bacd7f614ad5e9b9的代码可以正常工作。也许在较旧的git中,您需要将其拼写为
git rebase——在CA44F450EA72E649E7EBEB6A3428DDD1E43E1D 149c2e1b4f252e8bdb636997803a54f8227edc71上。