Git: 合并两个文件夹并从历史记录中删除一个

Git: merge two folders and get rid of one from the history

想象一下,我将所有软件都放在一个名为 A1 的 4GB 文件夹中。假设我正在跟踪 A1 以及另一个包含一些文档的文件夹 Foo

我的日常工作包括在 A1 开发我的软件,在 Foo 更改一些文件并执行一些提交。

然而,在我的开发过程中,我只更改了 A1 中包含的一些文件。其他开发人员可以更改 A1 中的所有文件,但他们使用的是另一个版本控制系统。每隔一段时间,他们都会发布 A1 的更新版本,他们要求我将我的代码集成到新版本中并从那里继续我的开发。我们称其他开发者发布的文件夹为A2

现在的问题是我通过 git 跟踪我的贡献的文件夹 A1,但现在在一些共享中有一个新的更新文件夹文件夹 A2我将使用的区域。

此问题的简单解决方案如下

git mv A1 A2
git commit
git checkout -b update_A1_A2
cp -rf MyCollegauesSharedSpace/A2 .
git add A2
git commit
git checkout master
git merge update_A1_A2

但在这种情况下,恐怕我的 repo 会增长得非常快,因为现在历史上同时存在 A1A2,并且每个都是 4GB。

但是,鉴于从现在开始我只对 A2 上的开发感兴趣,从历史记录中取消所有包含 A1.[=29= 的先前提交就足够了]

但是,如果一方面我要删除所有 A1(然后节省 4 GB),另一方面我也会删除我想要的文件夹 Foo保持。如何解决这个问题?

为什么要使用 A1 和 A2 这两个目录?你不是在模仿 git 会为你做什么吗?

另外,如果知道你的神器是什么就好了?给他们的补丁?编译成品?您的贡献是否应该回流到他们的版本控制系统,如果是,如何回流?

如果我处在你的位置,我会为他们的开发创建一个分支 'pristine',并且每次他们发布新版本时只将他们的更改提交到这个分支。从那里我会用我的贡献创建一个分支,并且只在那里工作。每次他们发布新版本时,我都会将其提交到 pristine 分支并标记它。然后我会将这些更改合并到我的开发分支。这让 git 负责跟踪文件更改,并使大小保持可控。