我想在 Github 上开源一个项目。
有很多提交(超过 2k)我会压缩成一个“初始提交”,以便从一个干净的代码库开始并隐藏一些历史内容。
问题是,是否有可能:
- 保留一个私有仓库(上面会有一些密钥,travis conf,...)以及所有初始提交
- 有一个干净的公共代码库(所有提交压缩成一个)
- 并在没有任何冲突的情况下在私人需要时处理公共回购和“合并”?
谢谢。
您可以在当前的 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
安全游戏,所以你必须做一些明确的事情来推动非公开历史)
有一个干净的公共代码库(所有提交压缩成一个)
只需删除当前的 .git、git init、添加所有内容并提交: 1 提交“挤压”其他所有内容。
保持私人回购
是的,您甚至拥有像Bitbucket这样提供免费私人回购的托管服务。
并在公共回购上工作,并在需要时在私人上“合并”,没有任何冲突
如果您没有任何并发修改,则合并应该是微不足道的或快进的。
它将在私有仓库的本地克隆中完成,然后将其推送到其私有托管服务器。
我建议创建一个新的公共 git 存储库并将所有相关文件复制到该新项目中(我们现在将其称为“PUBLIC”)。对 PUBLIC 进行初始提交。这为您的公共回购提供了没有历史记录的起点。
一旦你有了它,在未来,你想要公开的所有提交都应该提交给 PUBLIC。
您现有的私人仓库现在可以设置一个从 PUBLIC 拉取的新遥控器。您想要进行的任何最终应该在公共仓库中进行的更改都应该提交给 PUBLIC,然后合并到您的私人仓库中。