1

我是git的初学者,主要依赖Source Tree之类的GUI工具,请多多包涵!

在我们的 git 存储库中,我们有多个依赖于非常相似的核心代码库的产品。我们通过每个产品都有一个分支来实现这一点。当我们刚开始开发时,我们还没有将其建立为工作流,所以我们的分支历史看起来有点像这样:

 master
   |
B  |  C
 \ | /
  \|/
   |
   |  A
   | /
   |/
   2
   |
   |
   1
   |
   |

A、B 和 C 是特定于产品的分支,其中 A 是我们为客户提供的第一个产品。

问题

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

那么,有什么方法可以重写历史记录,以便分支 A 实际上从点 1 开始,并将特定于该产品的所有文件移动到该分支中?值得庆幸的是,过滤掉与产品 A 相关的文件应该很容易,因为它们大多位于单独的目录中。

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

谢谢!

编辑:注意,这是一个类似的问题: git: Split history of some files into a separate branch

4

2 回答 2

1

以下应该可以解决问题:

git checkout A
git rebase 2 --onto 1
于 2012-09-02T18:10:50.903 回答
1

首先,备份!

然后,这样做:

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

进而

git gc --aggressive

通过http://www.simplicidade.org/notes/archives/2009/04/merging_two_unr.html

于 2013-07-24T13:34:10.707 回答