4

我想在 Github 上开源一个项目。
有很多提交(超过 2k)我会压缩成一个“初始提交”,以便从一个干净的代码库开始并隐藏一些历史内容。

问题是,是否有可能:

  • 保留一个私有仓库(上面会有一些密钥,travis conf,...)以及所有初始提交
  • 有一个干净的公共代码库(所有提交压缩成一个)
  • 并在没有任何冲突的情况下在私人需要时处理公共回购和“合并”?

谢谢。

4

3 回答 3

3

您可以在当前的 repo 中非常有效地执行此操作:

从...开始:

# ...---o---H    HEAD, master

git cat-file -p master \
| sed '1,/^$/d' \
| git commit-tree HEAD^{tree} \
| xargs git branch public

要得到

# ...---o---H    HEAD, master
#
#           H'   public  <-- H's exact content and commit message, no history

然后,

git merge -s ours public

# ...---o---H---I    HEAD, master   <-- gives later merges an accurate base
#              /
#           H''   public

git remote add public -t public its://u/r/l   # <-- '-t public` sets default push
git push public

你就完成了。

(编辑:增加了-t public安全游戏,所以你必须做一些明确的事情来推动非公开历史)

于 2013-10-28T18:36:07.200 回答
1

有一个干净的公共代码库(所有提交压缩成一个)

只需删除当前的 .git、git init、添加所有内容并提交: 1 提交“挤压”其他所有内容。

保持私人回购

是的,您甚至拥有像Bitbucket这样提供免费私人回购的托管服务。

并在公共回购上工作,并在需要时在私人上“合并”,没有任何冲突

如果您没有任何并发​​修改,则合并应该是微不足道的或快进的。
它将在私有仓库的本地克隆中完成,然后将其推送到其私有托管服务器。

于 2013-10-28T17:37:11.840 回答
1

我建议创建一个新的公共 git 存储库并将所有相关文件复制到该新项目中(我们现在将其称为“PUBLIC”)。对 PUBLIC 进行初始提交。这为您的公共回购提供了没有历史记录的起点。

一旦你有了它,在未来,你想要公开的所有提交都应该提交给 PUBLIC。

您现有的私人仓库现在可以设置一个从 PUBLIC 拉取的新遥控器。您想要进行的任何最终应该在公共仓库中进行的更改都应该提交给 PUBLIC,然后合并到您的私人仓库中。

于 2013-10-28T17:53:13.457 回答