git:尽管历史斩断,仍保持同步

时间:2010-07-29 02:14:34

标签: git

背景:在将项目作为开源发布之前,我正在清理项目。在代码历史中,有一些我不想在公共存储库中显示的内容(在评论中咒骂,硬编码路径,令人尴尬的代码片段),所以我只希望公众看到代码库之后的代码库。清理截止点 - 但我想在我自己的私人存储库中保留完整的历史记录。

在截止点之后,私有和公共存储库将完全保持同步。除了当地的非推动临时分支机构外,不会有任何私人分支机构;两个存储库中的主分支应该是相同的,除了公共历史在截止点被切断。

据我所知,Git要求存储库具有完整的历史记录,因此我不能直接将我的本地主分支推送到公共和私有存储库。我想有可能创建一个单独的“公共”分支并使用历史重写,但这需要在将代码推送到存储库之前将私有分支合并到公众 - 我想要一个需要尽可能少的手工工作的设置

公共存储库旨在实现只进行集成,并与我进行集成。私有存储库将托管在我自己的Linux服务器上,因此可以设置自动合并到不同(公共)存储库的提交挂钩,然后推送到公共存储库。我希望有一个更清洁的解决方案 - 可能有一种方法来构建我没有想到的。

提前感谢任何建议:)

更新1

尝试遵循VonC的建议,这是我到目前为止所做的:

假设: 私有存储库在本地清理,提交,并推送到git @ server:private.git。 使用上次私有提交的文件创建的公共存储库在本地提交,并推送到git @ server:public.git。

1)~/priv$ git remote add public git@server:public.git 2)~/priv$ git fetch public

  

警告:没有常见的提交   (东西剪断)   * [new branch] master - >公/母

3)~/priv$ git log --format='%H %s'

  

d2d66cf2861ac7136ee3dc04467781825413b084清理代码库,为公众准备!   9ba0ccf4c819eb85dbe4613caec959b04edfb39a提交#2   a37c3c645dcdc4d8e5fc7ef3c53727cbf1d903ad第一次(私人)提交。

顶部哈希(d2d66 ...)是私有头部提交。

4)~/priv$ git log --reverse --format='%H %s' public/master

  

090a335746ecb03ea5362909be4969b87a99ab80第一次公开提交!   c43fccdda05319e57498f4f517650f9edbdb942a第二次公开提交:)

由于 - 反向,最旧的散列(090a3 ...)位于顶部。

5)~/priv$ echo '090a335746ecb03ea5362909be4969b87a99ab80 d2d66cf2861ac7136ee3dc04467781825413b084' >> .git/info/grafts

此时,git log public/master显示修正主义历史记录,但我不确定如何进展。 filter-branch以及所有......我只是成功搞砸了事情:)

1 个答案:

答案 0 :(得分:2)

完成清理工作后,您可以创建一个只有一个提交的新仓库(“干净的”),您将推送到公共仓库。

除了本地,你将有两个回购: